From 1c1f0e435284a23c85dc7d17d5b1731ab544b23d Mon Sep 17 00:00:00 2001 From: Muhammad Adil Date: Fri, 3 Apr 2026 08:10:44 +0000 Subject: [PATCH] Add 4 pdf net tutorials MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Categories: conversion-export, digital-signatures, printing-rendering Source: AI Search API Tutorials: - Verify PDF Signature and Add Bates Numbering – Complete C# Guide - How to Extract Signatures from PDF – Aspose C# Guide - Convert PDF to HTML and Verify PDF Signature – Full Aspose .NET Guide - How to Render PDF in C# – Complete Guide to PNG, HTML & Stamping Auto-generated by Professionalize.Tutorials Agent --- pdf/arabic/net/conversion-export/_index.md | 5 +- .../_index.md | 253 ++++++++++++++++ pdf/arabic/net/digital-signatures/_index.md | 6 + .../_index.md | 249 ++++++++++++++++ .../_index.md | 223 ++++++++++++++ pdf/arabic/net/printing-rendering/_index.md | 3 + .../_index.md | 276 +++++++++++++++++ pdf/chinese/net/conversion-export/_index.md | 3 + .../_index.md | 252 ++++++++++++++++ pdf/chinese/net/digital-signatures/_index.md | 7 + .../_index.md | 247 +++++++++++++++ .../_index.md | 221 ++++++++++++++ pdf/chinese/net/printing-rendering/_index.md | 5 +- .../_index.md | 274 +++++++++++++++++ pdf/czech/net/conversion-export/_index.md | 5 +- .../_index.md | 258 ++++++++++++++++ pdf/czech/net/digital-signatures/_index.md | 7 + .../_index.md | 249 ++++++++++++++++ .../_index.md | 207 +++++++++++++ pdf/czech/net/printing-rendering/_index.md | 3 + .../_index.md | 268 +++++++++++++++++ pdf/dutch/net/conversion-export/_index.md | 5 +- .../_index.md | 261 ++++++++++++++++ pdf/dutch/net/digital-signatures/_index.md | 8 +- .../_index.md | 251 ++++++++++++++++ .../_index.md | 223 ++++++++++++++ pdf/dutch/net/printing-rendering/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ pdf/english/net/conversion-export/_index.md | 5 +- .../_index.md | 258 ++++++++++++++++ pdf/english/net/digital-signatures/_index.md | 6 + .../_index.md | 249 ++++++++++++++++ .../_index.md | 223 ++++++++++++++ pdf/english/net/printing-rendering/_index.md | 5 +- .../_index.md | 276 +++++++++++++++++ pdf/french/net/conversion-export/_index.md | 3 + .../_index.md | 260 ++++++++++++++++ pdf/french/net/digital-signatures/_index.md | 6 + .../_index.md | 251 ++++++++++++++++ .../_index.md | 227 ++++++++++++++ pdf/french/net/printing-rendering/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ pdf/german/net/conversion-export/_index.md | 12 +- .../_index.md | 260 ++++++++++++++++ pdf/german/net/digital-signatures/_index.md | 7 + .../_index.md | 251 ++++++++++++++++ .../_index.md | 225 ++++++++++++++ pdf/german/net/printing-rendering/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ pdf/greek/net/conversion-export/_index.md | 13 +- .../_index.md | 260 ++++++++++++++++ pdf/greek/net/digital-signatures/_index.md | 8 +- .../_index.md | 251 ++++++++++++++++ .../_index.md | 224 ++++++++++++++ pdf/greek/net/printing-rendering/_index.md | 3 + .../_index.md | 278 +++++++++++++++++ pdf/hindi/net/conversion-export/_index.md | 3 + .../_index.md | 260 ++++++++++++++++ pdf/hindi/net/digital-signatures/_index.md | 5 + .../_index.md | 249 ++++++++++++++++ .../_index.md | 223 ++++++++++++++ pdf/hindi/net/printing-rendering/_index.md | 3 + .../_index.md | 278 +++++++++++++++++ pdf/hongkong/net/conversion-export/_index.md | 5 +- .../_index.md | 256 ++++++++++++++++ pdf/hongkong/net/digital-signatures/_index.md | 6 + .../_index.md | 247 +++++++++++++++ .../_index.md | 221 ++++++++++++++ pdf/hongkong/net/printing-rendering/_index.md | 3 + .../_index.md | 274 +++++++++++++++++ pdf/hungarian/net/conversion-export/_index.md | 5 +- .../_index.md | 255 ++++++++++++++++ .../net/digital-signatures/_index.md | 6 + .../_index.md | 251 ++++++++++++++++ .../_index.md | 225 ++++++++++++++ .../net/printing-rendering/_index.md | 3 + .../_index.md | 278 +++++++++++++++++ .../net/conversion-export/_index.md | 10 +- .../_index.md | 261 ++++++++++++++++ .../net/digital-signatures/_index.md | 8 +- .../_index.md | 251 ++++++++++++++++ .../_index.md | 209 +++++++++++++ .../net/printing-rendering/_index.md | 3 + .../_index.md | 278 +++++++++++++++++ pdf/italian/net/conversion-export/_index.md | 3 + .../_index.md | 259 ++++++++++++++++ pdf/italian/net/digital-signatures/_index.md | 6 + .../_index.md | 250 ++++++++++++++++ .../_index.md | 220 ++++++++++++++ pdf/italian/net/printing-rendering/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ pdf/japanese/net/conversion-export/_index.md | 2 + .../_index.md | 255 ++++++++++++++++ pdf/japanese/net/digital-signatures/_index.md | 6 + .../_index.md | 248 ++++++++++++++++ .../_index.md | 221 ++++++++++++++ pdf/japanese/net/printing-rendering/_index.md | 3 + .../_index.md | 274 +++++++++++++++++ pdf/korean/net/conversion-export/_index.md | 9 +- .../_index.md | 257 ++++++++++++++++ pdf/korean/net/digital-signatures/_index.md | 6 + .../_index.md | 249 ++++++++++++++++ .../_index.md | 223 ++++++++++++++ pdf/korean/net/printing-rendering/_index.md | 3 + .../_index.md | 276 +++++++++++++++++ pdf/polish/net/conversion-export/_index.md | 3 + .../_index.md | 259 ++++++++++++++++ pdf/polish/net/digital-signatures/_index.md | 7 + .../_index.md | 251 ++++++++++++++++ .../_index.md | 225 ++++++++++++++ pdf/polish/net/printing-rendering/_index.md | 3 + .../_index.md | 278 +++++++++++++++++ .../net/conversion-export/_index.md | 3 + .../_index.md | 260 ++++++++++++++++ .../net/digital-signatures/_index.md | 7 + .../_index.md | 251 ++++++++++++++++ .../_index.md | 225 ++++++++++++++ .../net/printing-rendering/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ pdf/russian/net/conversion-export/_index.md | 5 +- .../_index.md | 259 ++++++++++++++++ pdf/russian/net/digital-signatures/_index.md | 8 +- .../_index.md | 250 ++++++++++++++++ .../_index.md | 225 ++++++++++++++ pdf/russian/net/printing-rendering/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ pdf/spanish/net/conversion-export/_index.md | 5 +- .../_index.md | 260 ++++++++++++++++ pdf/spanish/net/digital-signatures/_index.md | 6 + .../_index.md | 250 ++++++++++++++++ .../_index.md | 223 ++++++++++++++ pdf/spanish/net/printing-rendering/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ pdf/swedish/net/conversion-export/_index.md | 3 + .../_index.md | 258 ++++++++++++++++ pdf/swedish/net/digital-signatures/_index.md | 6 + .../_index.md | 251 ++++++++++++++++ .../_index.md | 223 ++++++++++++++ pdf/swedish/net/printing-rendering/_index.md | 3 + .../_index.md | 276 +++++++++++++++++ pdf/thai/net/conversion-export/_index.md | 7 +- .../_index.md | 257 ++++++++++++++++ pdf/thai/net/digital-signatures/_index.md | 7 + .../_index.md | 249 ++++++++++++++++ .../_index.md | 223 ++++++++++++++ pdf/thai/net/printing-rendering/_index.md | 3 + .../_index.md | 276 +++++++++++++++++ pdf/turkish/net/conversion-export/_index.md | 5 +- .../_index.md | 258 ++++++++++++++++ pdf/turkish/net/digital-signatures/_index.md | 7 + .../_index.md | 250 ++++++++++++++++ .../_index.md | 205 +++++++++++++ pdf/turkish/net/printing-rendering/_index.md | 3 + .../_index.md | 280 ++++++++++++++++++ .../net/conversion-export/_index.md | 3 + .../_index.md | 259 ++++++++++++++++ .../net/digital-signatures/_index.md | 7 + .../_index.md | 249 ++++++++++++++++ .../_index.md | 223 ++++++++++++++ .../net/printing-rendering/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ 161 files changed, 23434 insertions(+), 36 deletions(-) create mode 100644 pdf/arabic/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/arabic/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/arabic/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/arabic/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/chinese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/chinese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/chinese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/chinese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/czech/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/czech/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/czech/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/czech/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/dutch/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/dutch/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/dutch/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/dutch/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/english/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/english/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/english/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/english/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/french/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/french/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/french/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/french/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/german/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/german/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/german/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/german/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/greek/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/greek/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/greek/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/greek/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/hindi/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/hindi/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/hindi/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/hindi/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/hongkong/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/hongkong/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/hongkong/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/hongkong/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/hungarian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/hungarian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/hungarian/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/hungarian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/indonesian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/indonesian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/indonesian/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/indonesian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/italian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/italian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/italian/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/italian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/japanese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/japanese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/japanese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/japanese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/korean/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/korean/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/korean/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/korean/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/polish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/polish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/polish/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/polish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/portuguese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/portuguese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/portuguese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/portuguese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/russian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/russian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/russian/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/russian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/spanish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/spanish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/spanish/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/spanish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/swedish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/swedish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/swedish/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/swedish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/thai/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/thai/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/thai/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/thai/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/turkish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/turkish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/turkish/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/turkish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md create mode 100644 pdf/vietnamese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md create mode 100644 pdf/vietnamese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md create mode 100644 pdf/vietnamese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md create mode 100644 pdf/vietnamese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md diff --git a/pdf/arabic/net/conversion-export/_index.md b/pdf/arabic/net/conversion-export/_index.md index 3a917f992..3a5c190d7 100644 --- a/pdf/arabic/net/conversion-export/_index.md +++ b/pdf/arabic/net/conversion-export/_index.md @@ -221,9 +221,12 @@ ### [تحويل 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 .NET](./pdf-to-html-conversion-aspose-dot-net/) برنامج تعليمي لبرمجة Aspose.PDF Net +### [تحويل PDF إلى HTML وتحويل PDF إلى HTML والتحقق من توقيع PDF – دليل Aspose .NET الكامل](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +تعلم كيفية تحويل PDF إلى HTML والتحقق من توقيعه الرقمي باستخدام Aspose.PDF لـ .NET في دليل شامل خطوة بخطوة. + ### [تحويل PDF إلى TIFF في .NET باستخدام Aspose.PDF: دليل خطوة بخطوة](./pdf-to-tiff-conversion-aspose-pdf-net/) تعلّم كيفية تحويل مستندات PDF إلى صور TIFF باستخدام Aspose.PDF لـ .NET. أتقن أعماق الألوان المخصصة وتقنيات معالجة الصور المتقدمة. diff --git a/pdf/arabic/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/arabic/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..2617df323 --- /dev/null +++ b/pdf/arabic/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,253 @@ +--- +category: general +date: 2026-04-02 +description: تحويل PDF إلى HTML مع الحفاظ على المتجهات، ثم التحقق من توقيع PDF باستخدام + Aspose PDF. تعلم تحويل Aspose PDF والتحقق من التوقيع الرقمي للـ PDF في C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: ar +og_description: تحويل PDF إلى HTML مع الحفاظ على المتجهات والتحقق من توقيع PDF باستخدام + Aspose PDF. كود C# خطوة بخطوة، نصائح، ومعالجة الحالات الخاصة. +og_title: تحويل PDF إلى HTML والتحقق من توقيع PDF – دليل Aspose .NET الكامل +tags: +- Aspose.PDF +- C# +- PDF processing +title: تحويل PDF إلى HTML والتحقق من توقيع PDF – دليل Aspose .NET الكامل +url: /ar/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# تحويل PDF إلى HTML والتحقق من توقيع PDF – دليل Aspose .NET الكامل + +هل احتجت يومًا إلى **تحويل PDF إلى HTML** لكنك كنت قلقًا من فقدان جودة المتجهات أو كسر التوقيعات الرقمية؟ لست وحدك. يواجه العديد من المطورين مشكلة عندما يحتوي ملف PDF على رسومات متجهة فقط أو توقيع رقمي يعتمد على SHA‑3 — حيث تقوم المحولات القياسية إما بتحويل كل شيء إلى نقطية أو تتجاهل التوقيع تمامًا. + +في هذا الدليل سنستعرض حلًا عمليًا باستخدام **Aspose.Pdf** لـ .NET: أولاً سنزيل الصور النقطية بينما نحول ملف PDF يحتوي على متجهات فقط إلى HTML نظيف، ثم نوضح لك كيفية **التحقق من توقيع PDF** (نعم، توقيع SHA‑3‑256) وعرض النتيجة في وحدة التحكم. في النهاية ستحصل على برنامج C# جاهز للتنفيذ يقوم بالمهمتين، بالإضافة إلى مجموعة من النصائح لتجنب المشكلات الشائعة. + +## ما ستحتاجه + +- **Aspose.Pdf for .NET** (الإصدار الأحدث حتى 2026‑04، مثل 23.12). +- بيئة تطوير .NET (Visual Studio 2022 أو VS Code مع امتداد C#). +- ملفي PDF مثالين: + 1. `vectorOnly.pdf` – يحتوي على متجهات ونص فقط، بدون صور نقطية. + 2. `signed_sha3.pdf` – موقّع رقمياً باستخدام تجزئة SHA‑3‑256. + +لا توجد حزم NuGet إضافية مطلوبة بخلاف `Aspose.Pdf`. + +--- + +## الخطوة 1: إعداد المشروع وتحميل ملفات PDF + +أنشئ تطبيقًا جديدًا من نوع console، أضف حزمة Aspose.Pdf من NuGet، واستورد المساحات الاسمية المطلوبة. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*لماذا هذا مهم*: تحميل المستندات مسبقًا يتيح لنا إعادة استخدام الكائنات لكل من التحويل والتحقق من التوقيع، مما يقلل من استهلاك الذاكرة. + +--- + +## الخطوة 2: تحويل PDF إلى HTML مع تخطي الصور النقطية + +توفر `HtmlSaveOptions` في Aspose.Pdf تحكمًا دقيقًا في طريقة معالجة الصور. ضبط `RasterImagesSavingMode` إلى `Skip` يخبر المكتبة بتجاهل الصور النقطية تمامًا — وهو مثالي للمصدر الذي يحتوي على متجهات فقط. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**الإخراج المتوقع**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*نصيحة احترافية*: إذا احتجت لاحقًا إلى تضمين HTML في صفحة ويب، فإن الملف الناتج يحتوي فقط على SVG وCSS — دون ملفات PNG/JPEG الضخمة. + +--- + +## الخطوة 3: إعداد معالج التوقيع + +فئة `PdfFileSignature` في Aspose.Pdf هي نقطة الدخول لأي عمل يتعلق بالتوقيع الرقمي. تقوم بقراءة قاموس التوقيع، استخراج الاسم، وتتيح لك التحقق باستخدام خوارزمية تجزئة محددة. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*لماذا هذه الخطوة حاسمة*: بدون المعالج لا يمكنك تعداد التوقيعات أو اختيار خوارزمية التجزئة التي تحتاجها (مثل SHA‑3‑256). + +--- + +## الخطوة 4: تعداد والتحقق من كل توقيع باستخدام SHA‑3‑256 + +طريقة `GetSignNames()` تُعيد جميع تسميات التوقيع في ملف PDF. قم بالتكرار عليها، استدعِ `VerifySignature` مع `DigestHashAlgorithm.Sha3_256`، واطبع النتيجة. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**مثال على إخراج وحدة التحكم**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*حالة خاصة*: إذا كان التوقيع يستخدم تجزئة مختلفة (مثل SHA‑256) فإن التحقق سيعيد `False`. يمكنك إضافة فحص احتياطي بتجربة قيم أخرى من `DigestHashAlgorithm` داخل الحلقة. + +--- + +## الخطوة 5: مثال كامل يعمل (جميع الشيفرات في مكان واحد) + +فيما يلي البرنامج الكامل الذي يمكنك نسخه ولصقه في `Program.cs`. استبدل `YOUR_DIRECTORY` بالمجلد الفعلي الذي توجد فيه ملفات PDF الخاصة بك. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +شغّل البرنامج (`dotnet run` أو اضغط **F5** في Visual Studio). يجب أن ترى تأكيد التحويل متبوعًا بنتائج التحقق من التوقيع. + +--- + +## أسئلة شائعة وكيفية التعامل معها + +| السؤال | الجواب | +|----------|--------| +| **هل سيظل ملف HTML يحتوي على الخطوط الأصلية؟** | يقوم Aspose.Pdf بدمج الخطوط المستخدمة كـ base‑64 data URIs بشكل افتراضي، لذا يتم عرض النتيجة بشكل صحيح حتى إذا كان الجهاز المضيف يفتقر إلى تلك الخطوط. | +| **ماذا لو كان ملف PDF يحتوي على متجهات *وصور*؟** | احتفظ بـ `RasterImagesSavingMode = Skip` لتجاهل الصور، أو غيّر إلى `EmbedAll` إذا كنت بحاجة إليها. الخيار يُطبق لكل عملية تحويل، لذا يمكنك تشغيل تمريرين إذا احتجت إلى كلا النسختين. | +| **توقيعي يستخدم SHA‑512 — كيف يمكنني التحقق منه؟** | استبدل `DigestHashAlgorithm.Sha3_256` بـ `DigestHashAlgorithm.Sha512`. يمكنك حتى اكتشاف الخوارزمية من قاموس التوقيع واختيارها ديناميكياً. | +| **هل هناك طريقة للحصول على تفاصيل شهادة المُوقّع؟** | نعم. بعد التحقق، استدعِ `signatureHandler.GetSignatureInfo(signName).Certificate` لاسترجاع شهادة X.509 وفحص الحقول مثل `Subject` و `Issuer`. | +| **ماذا لو كان ملف PDF محميًا بكلمة مرور؟** | حمّله باستخدام `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. يبقى باقي سير العمل كما هو. | + +## نصائح احترافية لكتابة كود جاهز للإنتاج + +1. **إغلاق ملفات PDF بشكل صحيح** – ضع كائنات `PdfDocument` داخل كتلة `using` أو استدعِ `Dispose()` لتحرير الموارد الأصلية. +2. **معالجة دفعات** – إذا كان لديك عشرات ملفات PDF، قم بالتكرار عبر مجلد، احفظ النتائج في ملف CSV، واستخدم `Parallel.ForEach` لتوازي عملية التحويل. +3. **التسجيل (Logging)** – استبدل `Console.WriteLine` بمسجل منظم (Serilog, NLog) لتحسين إمكانية التتبع، خاصةً عند التحقق من العديد من التوقيعات. +4. **معالجة الأخطاء** – امسك `Aspose.Pdf.Exceptions` للتعامل مع الملفات الفاسدة بشكل سلس: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **توافق الإصدارات** – يتطور Aspose.Pdf بسرعة. اختبر دائمًا مع الإصدار المحدد في ملف `csproj`. الواجهة البرمجية المعروضة تعمل مع الإصدارات 23.x وما بعدها. + +## الخلاصة + +لقد قمنا للتو **بتحويل PDF إلى HTML** مع الحفاظ فقط على المتجهات والنص، وتحققنا من **توقيع PDF** باستخدام خوارزمية SHA‑3‑256 — كل ذلك بضع أسطر من C#. النقاط الأساسية هي: + +- استخدم `HtmlSaveOptions.RasterImagesSavingMode = Skip` للحصول على HTML نظيف يحتوي على متجهات فقط. +- استفد من `PdfFileSignature` و `DigestHashAlgorithm.Sha3_256` لت **التحقق من توقيع PDF الرقمي** بشكل موثوق. + +من هنا يمكنك استكشاف مواضيع ذات صلة مثل **aspose pdf conversion** لتحويل PDF إلى PNG، استخراج الملفات المضمّنة، أو بناء خدمة ويب تستقبل ملفات PDF وتعيد مقتطفات HTML مُتحقّق منها. + +جرّبها، عدّل الخيارات، وأخبرنا بما اكتشفته. برمجة سعيدة! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 49e8b487d..784704da0 100644 --- a/pdf/arabic/net/digital-signatures/_index.md +++ b/pdf/arabic/net/digital-signatures/_index.md @@ -35,6 +35,9 @@ ### [كيفية استخراج معلومات توقيع PDF باستخدام Aspose.PDF .NET: دليل خطوة بخطوة](./extract-pdf-signature-info-aspose-pdf-net/) تعرّف على كيفية استخراج معلومات التوقيع الرقمي من ملفات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل خطوة بخطوة التثبيت والتنفيذ والتطبيقات العملية. +### [كيفية استخراج التوقيعات من ملفات PDF باستخدام Aspose C#](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +تعلم كيفية استخراج التوقيعات الرقمية من ملفات PDF باستخدام مكتبة Aspose.PDF في C# خطوة بخطوة. + ### [كيفية تنفيذ التوقيعات الرقمية في .NET باستخدام Aspose.PDF: دليل شامل](./implement-pdf-signatures-dotnet-aspose-pdf-guide/) تعرف على كيفية تنفيذ التوقيعات الرقمية الآمنة على ملفات PDF باستخدام Aspose.PDF لـ .NET، بما في ذلك إلغاء الحقول الاختيارية. @@ -59,6 +62,9 @@ ### [التحقق من توقيع PDF باستخدام Aspose – تحويل PDF إلى HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) تعرّف على كيفية التحقق من توقيع PDF وتحويله إلى HTML باستخدام Aspose. +### [تحقق من توقيع PDF وإضافة ترقيم Bates – دليل C# كامل](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +دليل شامل يوضح كيفية التحقق من توقيع PDF وإضافة ترقيم Bates باستخدام C# و Aspose.PDF. + ## موارد إضافية - [توثيق Aspose.PDF للشبكة](https://docs.aspose.com/pdf/net/) diff --git a/pdf/arabic/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/arabic/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..d1cfcb0c5 --- /dev/null +++ b/pdf/arabic/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,249 @@ +--- +category: general +date: 2026-04-02 +description: تعلم كيفية استخراج التوقيعات، إضافة حقل، إضافة صفحة فارغة إلى ملف PDF، + كيفية إضافة عنصر واجهة (widget)، والحفاظ على شفافية PDF باستخدام Aspose.Pdf في C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: ar +og_description: كيفية استخراج التوقيعات من ملف PDF وأداء المهام ذات الصلة مثل إضافة + الحقول والصفحات الفارغة والأدوات والحفاظ على الشفافية باستخدام Aspose.Pdf. +og_title: كيفية استخراج التوقيعات من ملفات PDF – دليل Aspose C# +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: كيفية استخراج التوقيعات من ملفات PDF – دليل Aspose C# +url: /ar/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية استخراج التوقيعات من PDF – دليل Aspose C# + +**كيفية استخراج التوقيعات من PDF** هو طلب شائع عندما تقوم بأتمتة معالجة العقود، أو الموافقات على الفواتير، أو أي سير عمل يعتمد على التوقيعات الرقمية. +في هذا الدليل سنستعرض أيضًا **كيفية إضافة حقل**، **إضافة صفحة فارغة إلى PDF**، **كيفية إضافة عنصر واجهة (widget)**، و**الحفاظ على شفافية PDF** باستخدام مكتبة Aspose.Pdf لـ .NET. + +تخيل أنك تستلم عشرات ملفات PDF موقعة كل ليلة؛ فتح كل ملف يدويًا للتحقق من التوقيعات سيكون كابوسًا. ببضع أسطر من كود C# يمكنك سحب أسماء التوقيعات برمجيًا، والحفاظ على الرسومات الأصلية، وحتى إغناء المستند بحقول نموذج جديدة—كل ذلك دون كسر الشفافية أو ملفات تعريف الألوان الموجودة. + +> **ما ستحصل عليه:** مثال كامل قابل للتنفيذ يحول PDF إلى PDF/X‑4 (مع الحفاظ على الشفافية)، يستخرج كل اسم توقيع مضمّن، يضيف صفحة فارغة، وينشئ حقل نصي يظهر في مكانين على نفس الصفحة. + +## المتطلبات المسبقة + +- .NET 6.0 أو أحدث (الكود يعمل أيضًا مع .NET Framework) +- Aspose.Pdf for .NET **v25.2** أو أحدث (مطلوب لـ `GetSignatureNames()`) +- مشروع Visual Studio أو أي بيئة تطوير C# +- ثلاثة ملفات PDF تجريبية في مجلد تتحكم فيه: + - `source.pdf` – أي PDF تريد تحويله مع الحفاظ على الشفافية + - `signed.pdf` – PDF يحتوي بالفعل على توقيعات رقمية + - (اختياري) مجلد فارغ لملفات الإخراج + +> **نصيحة احترافية:** إذا لم يكن لديك نسخة مرخصة بعد، يمكنك طلب ترخيص مؤقت مجاني من موقع Aspose. الوضع المجاني يعمل للاختبار لكنه يضيف علامة مائية. + +## الخطوة 1 – الحفاظ على شفافية PDF عبر التحويل إلى PDF/X‑4 + +غالبًا ما تُفقد الشفافية وملفات تعريف الألوان المضمّنة عند تسطيح PDF. التحويل إلى **PDF/X‑4** يحافظ على هذه العناصر البصرية، وهو أمر حاسم للمستندات الجاهزة للطباعة. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**لماذا هذا مهم:** +PDF/X‑4 هو المعيار ISO لملفات PDF الخاصة بتبادل الرسومات التي تحتفظ بالشفافية الحية. باستخدام `PdfFormatConversionOptions`، تتجنب الفخ الشائع المتمثل في تحويل الكائنات الشفافة إلى نقطية، مما قد يزيد حجم الملف بشكل كبير ويقلل الجودة. + +## الخطوة 2 – كيفية استخراج التوقيعات من PDF + +قدمت Aspose الدالة `GetSignatureNames()` في الإصدار 25.2، مما يجعل استخراج التوقيعات عملية سطر واحد. تُعيد الدالة مصفوفة من الأسماء المنطقية المعيّنة لكل حقل توقيع رقمي. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**ما المتوقع:** إذا كان `signed.pdf` يحتوي على توقيعين باسم *ManagerSig* و *ClientSig*، سيطبع الطرفية: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**معالجة الحالات الطرفية:** +- إذا لم يحتوي PDF على توقيعات، تُعيد `GetSignatureNames()` مصفوفة فارغة – لا يُرمى استثناء. +- بالنسبة لملفات PDF التي تحتوي على حقول توقيع تالفة، يمكنك تغليف الاستدعاء داخل `try/catch` وتسجيل الخطأ دون إيقاف العملية بالكامل. + +## الخطوة 3 – إضافة صفحة فارغة إلى PDF وإنشاء TextBox مع عدة Widgets + +إضافة صفحة جديدة أمر بسيط، لكن **كيفية إضافة حقل** و**كيفية إضافة widget** معًا يتطلب بعض الدقة. الـ *widget* هو التمثيل البصري لحقل النموذج؛ يمكنك إرفاق عدة widgets لنفس الحقل المنطقي، مما يسمح بظهور نفس البيانات في مواقع متعددة. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**لماذا نستخدم عدة widgets؟** +افترض أنك تريد أن يظهر نفس التعليق على الوجهين الأمامي والخلفي لعقد. بإرفاق widgetين لنفس الحقل، أي تعديل يجريه المستخدم في موقع سيُحدّث تلقائيًا الموقع الآخر. + +**المخاطر الشائعة:** +- نسيان إضافة الحقل إلى `newDoc.Form` سيجعل الـ widget غير مرئي في عارضات PDF. +- استخدام إحداثيات مستطيل متطابقة لكلا الـ widgets سيؤدي إلى تراكبهما فوق بعضهما—تأكد من أن قيم `Rectangle` مختلفة. + +## الخطوة 4 – تجميع كل شيء معًا: مثال كامل قابل للتنفيذ + +فيما يلي برنامج واحد ينفّذ كل خطوة بالترتيب المذكور. انسخه إلى مشروع وحدة تحكم جديد، عدّل المسارات، وشغّله. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### المخرجات المتوقعة + +عند تشغيل البرنامج يجب أن ترى شيئًا مشابهًا لـ: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +افتح `TextBoxMultipleWidgets.pdf` في Adobe Acrobat Reader؛ ستلاحظ وجود صندوقين نصيين متطابقين يحملان العنوان **Comments**—أحدهما قريب من الأعلى، والآخر أسفل قليلًا. الكتابة في أحدهما تُحدّث الآخر فورًا. + +## الأسئلة المتكررة (FAQ) + +| السؤال | الجواب | +|----------|--------| +| **هل يمكنني استخراج بايتات التوقيع الفعلية؟** | `GetSignatureNames()` تُعيد فقط الأسماء المنطقية. لاستخراج الشهادة أو قيمة التوقيع تحتاج إلى كائنات `SignatureField` (`document.Form["fieldName"] as SignatureField`). | +| **هل يعمل تحويل PDF/X‑4 على ملفات PDF المشفّرة؟** | نعم، طالما تزود كلمة المرور عبر `Document.Open(file, password)`. | +| **ماذا لو احتجت إلى أكثر من widgetين؟** | ما عليك سوى استدعاء `textBox.Widgets.Add()` لكل `WidgetAnnotation` إضافي. | +| **هل ستورث الصفحة الفارغة حجم الصفحة من PDF الأصلي؟** | الصفحة الجديدة تستخدم الحجم الافتراضي (A4). يمكنك تمرير كائن `Page` بأبعاد مخصصة إذا لزم الأمر. | +| **هل الكود متوافق مع .NET Core؟** | بالتأكيد—Aspose.Pdf متعدد المنصات. فقط أضف حزمة NuGet إلى مشروع .NET Core الخاص بك. | + +## الخلاصة + +في هذا الدليل استعرضنا **كيفية استخراج التوقيعات من ملفات PDF**، مع تغطية **كيفية إضافة حقل**، **إضافة صفحة فارغة إلى PDF**، **كيفية إضافة widget**، و**الحفاظ على شفافية PDF** باستخدام Aspose.Pdf للغة C#. الآن لديك حل شامل من البداية إلى النهاية يمكنك دمجه في أي خط أنابيب لمعالجة المستندات. + +هل أنت مستعد للتحدي التالي؟ جرّب دمج هذه التقنيات مع وحدة OCR من Aspose لقراءة النص من المستندات الممسوحة ضوئيًا + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/arabic/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..0858ca54f --- /dev/null +++ b/pdf/arabic/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,223 @@ +--- +category: general +date: 2026-04-02 +description: تحقق من توقيع PDF بسرعة وتعلم كيفية إضافة ترقيم باتس باستخدام Aspose.Pdf. + يتضمن كودًا خطوة بخطوة ونصائح. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: ar +og_description: تحقق من توقيع PDF بسرعة وتعلم كيفية إضافة ترقيم بايتس باستخدام Aspose.Pdf. + اتبع المثال الكامل وتجنب الأخطاء الشائعة. +og_title: تحقق من توقيع PDF وإضافة ترقيم بيتس – دليل C# الكامل +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: تحقق من توقيع PDF وإضافة ترقيم بايتس – دليل C# الكامل +url: /ar/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# تحقق من توقيع PDF وإضافة ترقيم Bates – دليل C# الكامل + +هل احتجت يومًا إلى **التحقق من توقيع PDF** قبل إرسال العقد، لكن لم تكن متأكدًا من أي استدعاء API تستخدمه؟ لست وحدك—العديد من المطورين يواجهون هذه المشكلة عند التعامل مع ملفات PDF القانونية. في هذا الدرس سنستعرض خطوة بخطوة **كيفية التحقق من توقيع PDF** باستخدام Aspose.Pdf ثم نوضح **كيفية إضافة ترقيم Bates** حتى تظل ملفاتك جاهزة للتدقيق. + +سنناقش أيضًا **كيفية التحقق من التوقيع** برمجيًا، ونغطي **كيفية إضافة Bates** في خطوة واحدة، ونشرح نتائج **check pdf signature** حتى يمكنك الوثوق بالمخرجات. في النهاية ستحصل على تطبيق C# Console يعمل على إنجاز المهمتين—بدون غموض، فقط كود واضح. + +--- + +## ما الذي ستحتاجه + +- **.NET 6.0** أو أحدث (المثال يعمل أيضًا مع .NET Framework 4.7+) +- حزمة **Aspose.Pdf for .NET** عبر NuGet (الإصدار 23.11 أو أحدث) +- ملف PDF موقّع (`signed.pdf`) تريد التحقق منه +- ملف PDF عادي (`input.pdf`) سيُضاف إليه ترقيم Bates + +إذا كان لديك هذه المتطلبات، فأنت جاهز للبدء. لا تحتاج إلى أي SDK إضافي، ولا ملفات إعداد مخفية. + +--- + +## الخطوة 1: إعداد المشروع + +ابدأ بإنشاء مشروع Console: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +افتح `Program.cs` واحذف الكود الافتراضي. سنبني كل شيء من الصفر حتى تتمكن من نسخ‑لصق النسخة النهائية لاحقًا. + +--- + +## الخطوة 2: التحقق من توقيع PDF + +### لماذا يُعد التحقق مهمًا + +يمكن أن يصبح التوقيع الرقمي **مُعرضًا للخطر** إذا تم إلغاء الشهادة الأساسية أو تم تعديل المستند بعد التوقيع. توفر Aspose.Pdf طريقة `IsSignatureCompromised` التي تُعيد قيمة منطقية—بسيطة، لكنها قوية بما يكفي لمعظم خطوط تدقيق البيانات. + +### مقتطف الكود + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**شرح** + +- `Document` يقوم بتحميل ملف PDF إلى الذاكرة. +- `PdfFileSignature` يلتف حول المستند ويُظهر طرقًا متعلقة بالتوقيع. +- `IsSignatureCompromised("Signature1")` يتحقق من سلامة التوقيع المسمى *Signature1*. +- النتيجة المنطقية تُخبرك ما إذا كان التوقيع لا يزال موثوقًا. + +> **نصيحة احترافية:** إذا لم تكن متأكدًا من اسم حقل التوقيع، استدعِ `pdfSignature.GetSignatureNames()` أولًا؛ سيُعيد قائمة بجميع معرفات التوقيع. + +--- + +## الخطوة 3: إعداد خيارات ترقيم Bates + +### ما هو ترقيم Bates؟ + +ترقيم Bates هو معرفات متسلسلة تُطبع على كل صفحة من المستندات القانونية أو الجنائية. يجعل الإشارة إلى الصفحات أمرًا سهلًا أثناء عمليات الاكتشاف أو التدقيق. تسمح لك `BatesNumberingOptions` في Aspose.Pdf بتخصيص البادئة، رقم البداية، عدد الأرقام، المحاذاة، والهامش—كل ذلك في كائن واحد. + +### استمرار الكود + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**شرح** + +- `BatesNumberingOptions` يجمع كل خيارات التنسيق. +- `AddBatesNumbering` يمر تلقائيًا على كل صفحة—دون الحاجة إلى حلقة يدوية. +- البادئة `INV-` ورقم البداية `1000` ينتجان تسميات مثل `INV-01000`، `INV-01001`، إلخ. +- عدل `BottomMargin` إذا أردت وضع الرقم أعلى أو أسفل الصفحة. + +--- + +## الخطوة 4: تشغيل المثال الكامل + +احفظ الملف، ثم نفّذ: + +```bash +dotnet run +``` + +يجب أن ترى سطرين في وحدة التحكم: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +إذا طبع السطر الأول `True`، فهذا يعني أن التوقيع **مُعرض للخطر**—أي أن المستند ربما تم تعديله بعد التوقيع أو أن الشهادة لم تعد صالحة. في هذه الحالة، أوقف أي معالجة لاحقة. + +--- + +## الخطوة 5: الحالات الخاصة الشائعة وكيفية التعامل معها + +| الحالة | ما الذي يجب مراقبته | الحل المقترح | +|-----------|-------------------|---------------| +| **تعدد التوقيعات** | `IsSignatureCompromised` يتحقق من حقل واحد في كل مرة. | قم بعمل حلقة عبر `pdfSignature.GetSignatureNames()` وتحقق من كل توقيع. | +| **اسم حقل توقيع مخصص** | استخدام `"Signature1"` قد يسبب استثناء إذا كان الاسم مختلفًا. | احصل أولًا على قائمة الأسماء، أو مرّر الاسم الدقيق الذي تراه في Acrobat. | +| **ملفات PDF كبيرة (100+ صفحة)** | إضافة ترقيم Bates قد تستهلك الذاكرة بشكل كبير. | استخدم `Document.Save` مع `SaveOptions` التي تدعم البث (`PdfSaveOptions { Compress = true }`). | +| **حروف غير لاتينية في البادئة** | بعض الخطوط لا تدعم Unicode افتراضيًا. | عيّن `pdfWithBates.Font` إلى خط يدعم Unicode مثل `Arial Unicode MS`. | +| **الرغبة في وضع الأرقام على اليسار** | المحاذاة مُحددة مسبقًا إلى `Right`. | غيّر `Alignment = HorizontalAlignment.Left` في `BatesNumberingOptions`. | + +--- + +## الخطوة 6: التحقق من النتيجة يدويًا (اختياري) + +افتح `BatesNumbered.pdf` بأي عارض PDF: + +1. تصفح الصفحات—يجب أن يظهر على كل صفحة تسمية مثل **INV‑01000** في الزاوية السفلية اليمنى. +2. استخدم **لوحة التوقيع** في Acrobat وانقر مزدوجًا على التوقيع لتتأكد من أن الحالة تتطابق مع مخرجات وحدة التحكم. + +إذا كان كل شيء متطابقًا، فقد نجحت في **check pdf signature** وتطبيق **add bates numbering** في خطوة واحدة. + +--- + +## الأسئلة المتكررة + +**س: هل يمكنني التحقق من التوقيع دون تحميل المستند بالكامل؟** +ج: تقوم Aspose.Pdf ببث الملف في الخلفية، لكن لا يزال عليك إنشاء كائن `Document`. للملفات الضخمة، يمكنك استخدام `PdfFileSignature` مباشرة مع تدفق ملف لتقليل استهلاك الذاكرة. + +**س: هل أحتاج إلى ترخيص لـ Aspose.Pdf؟** +ج: النسخة التجريبية المجانية تعمل، لكنها تضيف علامة مائية. للإنتاج ستحتاج إلى ترخيص صالح؛ وإلا ستحمل ملفات PDF الناتجة شعار Aspose. + +**س: ماذا لو أردت إضافة ترقيم Bates فقط إلى مجموعة فرعية من الصفحات؟** +ج: استخدم `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` حيث يحدد المصفوفة أرقام الصفحات التي تريد ترقيمها. + +--- + +## الخلاصة + +أنت الآن تعرف **كيفية التحقق من توقيع PDF** باستخدام Aspose.Pdf، وتفهم معنى النتيجة المنطقية، ويمكنك بثقة **إضافة ترقيم Bates** إلى أي PDF تملكه. المثال الكامل القابل للتنفيذ يجمع المهمتين، مما يمنحك أداة Console واحدة تتحقق من أصالة المستند وتضع عليه معرفات جاهزة للتدقيق. + +بعد ذلك، قد تستكشف **كيفية التحقق من التوقيع** مقابل مخزن الجذور الموثوق، أو تجرب أنماط **add bates numbering** مخصصة مثل الطوابع المائلة أو البادئات حسب القسم. كلا الموضوعين يبنيان على الأساس الذي أتممته الآن، وسيجعلان خط أنابيب معالجة المستندات أكثر قوة. + +برمجة سعيدة، وتذكر—التحقق من التوقيعات وترقيم الصفحات سهل بمجرد وجود الكود المناسب! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/arabic/net/printing-rendering/_index.md index 557365772..72d44e11f 100644 --- a/pdf/arabic/net/printing-rendering/_index.md +++ b/pdf/arabic/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ ### [تعيين عامل تكبير مخصص في ملفات PDF باستخدام Aspose.PDF لـ .NET - دليل كامل](./aspose-pdf-net-set-zoom-factor-pdfs/) تعرّف على كيفية ضبط مُعامل تكبير/تصغير مُخصّص في مستندات PDF باستخدام Aspose.PDF لـ .NET. يُغطّي هذا الدليل خطوات التثبيت والتنفيذ والتطبيقات العملية. +### [كيفية عرض PDF في C# – دليل شامل إلى PNG وHTML والختم](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +تعلم كيفية تحويل ملفات PDF إلى صور PNG أو HTML وإضافة الختم باستخدام Aspose.PDF لـ .NET في C# خطوة بخطوة. + ## موارد إضافية - [توثيق Aspose.PDF للشبكة](https://docs.aspose.com/pdf/net/) diff --git a/pdf/arabic/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/arabic/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..f0c1a379a --- /dev/null +++ b/pdf/arabic/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-04-02 +description: كيفية عرض PDF باستخدام Aspose.PDF في C#. تعلّم كيفية تحويل PDF إلى PNG، + حفظ PDF كملف HTML، وإضافة طوابع نصية تتكيف تلقائيًا بكفاءة. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: ar +og_description: كيفية عرض PDF باستخدام Aspose.PDF في C#. يوضح هذا الدليل تحويل PDF + إلى PNG، وحفظه كملف HTML، وإنشاء طوابع نصية تلقائيًا ملائمة. +og_title: كيفية عرض PDF في C# – PNG، HTML وطوابع التلائم التلقائي +tags: +- Aspose.PDF +- C# +- PDF processing +title: كيفية عرض PDF في C# – دليل شامل إلى PNG وHTML وإضافة الختم +url: /ar/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية عرض PDF في C# – دليل شامل إلى PNG، HTML و Stamping + +هل تساءلت يومًا **كيف تعرض PDF** في تطبيق .NET دون فقدان أي حرف؟ ربما جرّبت `PdfRenderer` سريعًا فقط لتلاحظ فقدان الأحرف، أو تحتاج إلى صورة PNG واضحة للمعاينة لكن النتيجة تظهر متعرجة. في تجربتي، الجمع الصحيح بين خيارات العرض وإدارة الخطوط هو ما يفرق بين معاينة مكسورة وصورة بكسل‑مثالية. + +في هذا الدرس سنستعرض ثلاث سيناريوهات واقعية باستخدام Aspose.PDF for .NET: عرض صفحة PDF كـ PNG مع تحليل الخطوط، إضافة `TextStamp` يضبط حجمه تلقائيًا، وحفظ PDF كـ HTML باستخدام جدول CMap الخاص بالخط. بنهاية الدرس ستكون قادرًا على **عرض PDF إلى PNG**، **تحويل صفحة PDF إلى PNG**، **تصدير صورة صفحة PDF**، وحتى **حفظ PDF كـ HTML** دون أي مشاكل. + +## المتطلبات المسبقة + +- .NET 6.0 أو أحدث (الكود يعمل أيضًا على .NET Framework 4.6+) +- حزمة NuGet Aspose.PDF for .NET (`Install-Package Aspose.PDF`) +- ملف PDF يحتوي على خطوط معقدة (مثال: `complexFonts.pdf`) لعرض التجربة +- إلمام أساسي بـ C# و Visual Studio (أو أي بيئة تطوير تفضّلها) + +> **نصيحة احترافية:** إذا كنت تعمل على خادم CI، تأكد من أن ملف ترخيص Aspose مضمّن كـ resource أو مُشار إليه عبر متغيّر بيئة لتجنّب علامات مائية التقييم. + +--- + +## ## كيفية عرض PDF إلى PNG مع تحليل الخطوط + +### لماذا نحتاج إلى تحليل الخطوط؟ + +عند احتواء PDF على خطوط مخصصة أو مدمجة، قد يتسبب العرض الساذج في حذف الحروف التي لا يستطيع العارض ربطها. تفعيل `AnalyzeFonts` يجبر Aspose على فحص تدفقات الخطوط واستبدال الحروف المفقودة، مما يضمن صورة دقيقة. + +### تنفيذ خطوة بخطوة + +1. **إنشاء `PngDevice` مع تفعيل `AnalyzeFonts`.** +2. **تحميل ملف PDF المصدر** باستخدام `Document`. +3. **معالجة الصفحة المطلوبة** وكتابة ملف PNG إلى القرص. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**ما يجب أن تراه:** ملف اسمه `rendered.png` داخل `YOUR_DIRECTORY` يبدو مطابقًا للصفحة الأولى من `complexFonts.pdf`، بما في ذلك جميع الأحرف الخاصة والديكورات. + +![صورة صفحة PDF مُعرضة كـ PNG](rendered.png "صورة صفحة PDF مُعرضة كـ PNG") + +#### الأخطاء الشائعة وكيفية تجنّبها + +- **غياب الخطوط على الخادم:** إذا كان الـ PDF يشير إلى خطوط غير مدمجة، ضع تلك الخطوط في مسار البحث الخاص بالتطبيق أو فعّل `FontRepository` لتوجيهه إلى مجلد مخصص. +- **ملفات PDF الكبيرة:** عرض عدة صفحات داخل حلقة قد يستهلك الذاكرة؛ احرص على التخلص من كل كائن `Document` فور الانتهاء أو استخدم كتل `using` كما هو موضح. + +--- + +## ## إضافة TextStamp يتكيف تلقائيًا (عرض PDF بنص ديناميكي) + +### متى تحتاج إلى ختم بحجم ديناميكي؟ + +تخيل أنك تُنشئ فواتير وتحتاج إلى وضع علامة مائية “PAID” تتناسب مع أي مستطيل تختاره، بغض النظر عن طول النص. حساب حجم الخط يدويًا عرضة للأخطاء؛ `AutoAdjustFontSizeToFitStampRectangle` من Aspose يقوم بهذه المهمة تلقائيًا. + +### تنفيذ خطوة بخطوة + +1. **تهيئة `TextStamp`** مع خصائص التعديل التلقائي. +2. **تحميل ملف PDF الهدف** الذي تريد إضافة الختم إليه. +3. **إضافة الختم إلى صفحة** وحفظ النتيجة. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**النتيجة:** يحتوي `stampAutoFit.pdf` على النص “Important notice” بحجم مثالي داخل المستطيل 300 × 150 pt، بغض النظر عن طول السلسلة الأصلية. + +#### الحالات الحدية التي يجب مراعاتها + +- **السلاسل الطويلة جدًا:** إذا تجاوز النص المستطيل حتى بأصغر حجم للخط، سيقوم Aspose بقطعه وفقًا لـ `WordWrapMode`. يمكنك فحص الطول مسبقًا أو زيادة حجم المستطيل. +- **عدة أختام:** إعادة استخدام نفس كائن `TextStamp` على صفحات مختلفة يعمل، لكن تذكّر أن خصائص الموقع (`Left`, `Top`) تحتفظ بآخر قيم لها—قم بإعادة ضبطها حسب الحاجة. + +--- + +## ## حفظ PDF كـ HTML باستخدام جدول CMap الخاص بالخط + +### لماذا نستخدم جدول CMap؟ + +عند تحويل PDF إلى HTML، الحفاظ على تطابق Unicode أمر حاسم للنص القابل للبحث. استراتيجية الاعتماد على CMap تجبر Aspose على إعطاء أولوية لخريطة الأحرف الداخلية للخط، مما ينتج استخراج نص أكثر دقة مقارنةً بالترميز العام. + +### تنفيذ خطوة بخطوة + +1. **إنشاء `HtmlSaveOptions`** مع قاعدة الترميز المعتمدة على CMap. +2. **تحميل ملف PDF المصدر**. +3. **حفظه كـ HTML** باستخدام الخيارات المكوّنة. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**ما ستحصل عليه:** مجلد (إذا كان `SplitIntoPages` مفعلاً) يحتوي على `cmapHtml.html` والموارد المرتبطة. افتح ملف HTML في المتصفح وستلاحظ نصًا قابلًا للتحديد والبحث يطابق PDF الأصلي تقريبًا. + +#### نصائح لتصدير HTML نظيف + +- **الصور مقابل المتجهات:** اضبط `RasterImagesSavingMode` إلى `RasterImagesSavingMode.AsEmbeddedPartsOfPng` إذا كنت تفضّل PNGs على JPEGs للحصول على رسومات أكثر وضوحًا. +- **ملفات PDF الكبيرة:** استخدم `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` لتقسيم كل صفحة إلى ملف HTML خفيف. + +--- + +## ## مثال كامل يعمل – جميع السيناريوهات الثلاثة في مشروع واحد + +فيما يلي تطبيق console مكتمل يوضح التقنيات الثلاثة جنبًا إلى جنب. انسخه إلى مشروع C# console جديد، أضف حزمة Aspose.PDF من NuGet، وعدّل مسارات الملفات حسب الحاجة. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +شغّل البرنامج، وستجد: + +- `rendered.png` – صورة مثالية للصفحة الأولى من PDF. +- `stampAutoFit.pdf` – PDF الأصلي مع ختم “Important notice” بحجم ديناميكي. +- `cmapHtml.html` (بالإضافة إلى ملفات HTML لكل صفحة) – نسخة HTML تحافظ على ترميز النص الأصلي. + +--- + +## ## الأسئلة المتكررة (FAQ) + +**س: هل يزيد `AnalyzeFonts` من زمن العرض؟** +ج: نعم، بشكل طفيف، لأن Aspose يفحص كل تدفق خط. عادةً ما يكون هذا العوض مقبولًا للـ PDFs المعقدة حيث لا يمكن فقدان الحروف. + +**س: هل يمكنني عرض عدة صفحات داخل حلقة؟** +ج: بالطبع. ما عليك سوى التكرار على `sourcePdf.Pages` واستدعاء `pngDevice.Process(page, $"page{page.Number}.png")`. تذكّر التخلص من كل كائن `Document` إذا فتحتها بشكل منفصل. + +**س: ماذا لو... + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 74a842956..d7cb16905 100644 --- a/pdf/chinese/net/conversion-export/_index.md +++ b/pdf/chinese/net/conversion-export/_index.md @@ -224,6 +224,9 @@ Aspose.PDF Net 代码教程 ### [使用 Aspose.PDF for .NET 将 PDF 转换为 HTML](./pdf-to-html-conversion-aspose-dot-net/) Aspose.PDF Net 代码教程 +### [将 PDF 转换为 HTML 并验证 PDF 签名 – 完整 Aspose .NET 指南](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +学习如何使用 Aspose.PDF for .NET 将 PDF 转换为 HTML 并验证其数字签名,提供完整的代码示例和步骤指南。 + ### [使用 Aspose.PDF 在 .NET 中将 PDF 转换为 TIFF:分步指南](./pdf-to-tiff-conversion-aspose-pdf-net/) 学习如何使用 Aspose.PDF for .NET 将 PDF 文档转换为 TIFF 图像。掌握自定义色深和高级图像处理技术。 diff --git a/pdf/chinese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/chinese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..1c475e778 --- /dev/null +++ b/pdf/chinese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-02 +description: 将 PDF 转换为 HTML 并保留矢量图形,然后使用 Aspose PDF 验证 PDF 签名。学习 Aspose PDF 转换并在 C# + 中检查 PDF 数字签名。 +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: zh +og_description: 将 PDF 转换为 HTML 并保留矢量图形,使用 Aspose PDF 验证 PDF 签名。提供逐步 C# 代码、技巧和边缘情况处理。 +og_title: 将 PDF 转换为 HTML 并验证 PDF 签名 – 完整的 Aspose .NET 教程 +tags: +- Aspose.PDF +- C# +- PDF processing +title: 将 PDF 转换为 HTML 并验证 PDF 签名 – 完整 Aspose .NET 指南 +url: /zh/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 将 PDF 转换为 HTML 并验证 PDF 签名 – 完整 Aspose .NET 教程 + +是否曾经需要**将 PDF 转换为 HTML**,但担心会失去矢量质量或破坏数字签名?您并非唯一遇到此问题的人。许多开发者在 PDF 仅包含矢量图形或基于 SHA‑3 的数字签名时会卡住——标准转换器要么将所有内容栅格化,要么完全忽略签名。 + +在本指南中,我们将使用 **Aspose.Pdf** for .NET 逐步演示一种实用方案:首先在将仅包含矢量的 PDF 转换为干净的 HTML 时去除栅格图像,然后展示如何**验证 PDF 签名**(是的,就是 SHA‑3‑256),并在控制台中输出结果。完成后,您将拥有一个可直接运行的 C# 程序,能够完成这两项任务,并附带一些避免常见陷阱的技巧。 + +## 您需要的环境 + +- **Aspose.Pdf for .NET**(截至 2026‑04 的最新版本,例如 23.12)。 +- .NET 开发环境(Visual Studio 2022 或带 C# 扩展的 VS Code)。 +- 两个示例 PDF: + 1. `vectorOnly.pdf` – 仅包含矢量和文本,没有栅格图像。 + 2. `signed_sha3.pdf` – 使用 SHA‑3‑256 哈希进行数字签名。 + +不需要除 `Aspose.Pdf` 之外的其他 NuGet 包。 + +--- + +## 步骤 1:设置项目并加载 PDF + +Create a new console app, add the Aspose.Pdf NuGet, and bring the namespaces into scope. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*为什么这很重要*:提前加载文档可以让我们在转换和签名验证之间复用对象,从而降低内存使用。 + +--- + +## 步骤 2:在跳过栅格图像的情况下将 PDF 转换为 HTML + +Aspose.Pdf’s `HtmlSaveOptions` gives you fine‑grained control over how images are handled. Setting `RasterImagesSavingMode` to `Skip` tells the library to ignore raster pictures entirely—perfect for a vector‑only source. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Expected output**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*专业提示*:如果以后需要将 HTML 嵌入网页,生成的文件仅包含 SVG 和 CSS——没有笨重的 PNG/JPEG 数据块。 + +--- + +## 步骤 3:准备签名处理器 + +Aspose.Pdf’s `PdfFileSignature` class is the entry point for any digital‑signature work. It reads the signature dictionary, extracts the name, and lets you verify using a specific hash algorithm. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*为什么此步骤至关重要*:没有该处理器,您无法枚举签名或选择所需的哈希算法(例如 SHA‑3‑256)。 + +--- + +## 步骤 4:使用 SHA‑3‑256 枚举并验证每个签名 + +The `GetSignNames()` method returns every signature label in the PDF. Loop through them, call `VerifySignature` with `DigestHashAlgorithm.Sha3_256`, and print the result. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Sample console output**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*边缘情况*:如果签名使用了不同的哈希(例如 SHA‑256),验证将返回 `False`。您可以在循环中尝试其他 `DigestHashAlgorithm` 值以进行回退检查。 + +--- + +## 步骤 5:完整工作示例(所有代码集中在一起) + +Below is the complete program you can copy‑paste into `Program.cs`. Replace `YOUR_DIRECTORY` with the actual folder where your PDFs live. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +运行程序(`dotnet run` 或在 Visual Studio 中按 **F5**)。您应该会看到转换确认信息,随后是签名验证结果。 + +--- + +## 常见问题与解决方案 + +| Question | Answer | +|----------|--------| +| **Will the HTML still contain the original fonts?** | Aspose.Pdf embeds the used fonts as base‑64 data URIs by default, so the output renders correctly even if the host machine lacks those fonts. | +| **What if my PDF has both vectors *and* images?** | Keep `RasterImagesSavingMode = Skip` to drop images, or switch to `EmbedAll` if you need them. The option is per‑conversion, so you can run two passes if you need both versions. | +| **My signature uses SHA‑512—how do I verify it?** | Replace `DigestHashAlgorithm.Sha3_256` with `DigestHashAlgorithm.Sha512`. You can even detect the algorithm from the signature dictionary and choose dynamically. | +| **Is there a way to get the signer’s certificate details?** | Yes. After verification, call `signatureHandler.GetSignatureInfo(signName).Certificate` to retrieve the X.509 certificate and inspect fields like `Subject` and `Issuer`. | +| **What if the PDF is password‑protected?** | Load it with `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. The rest of the workflow stays the same. | + +## 生产环境代码的专业提示 + +1. **Dispose PDFs Properly** – Wrap `PdfDocument` instances in a `using` block or call `Dispose()` to free native resources. +2. **Batch Processing** – If you have dozens of PDFs, iterate over a directory, store results in a CSV, and parallelize the conversion with `Parallel.ForEach`. +3. **Logging** – Replace `Console.WriteLine` with a structured logger (Serilog, NLog) for better traceability, especially when verifying many signatures. +4. **Error Handling** – Catch `Aspose.Pdf.Exceptions` to handle corrupt files gracefully: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Version Compatibility** – Aspose.Pdf evolves quickly. Always test with the exact version referenced in your `csproj`. The API shown works for 23.x and later. + +## 结论 + +We’ve just **converted PDF to HTML** while preserving only vectors and text, and we’ve **verified PDF signature** using the SHA‑3‑256 algorithm—all with a handful of lines of C#. The primary takeaways are: + +- Use `HtmlSaveOptions.RasterImagesSavingMode = Skip` for clean vector‑only HTML. +- Leverage `PdfFileSignature` and `DigestHashAlgorithm.Sha3_256` to **check pdf digital signature** reliably. + +From here you can explore related topics such as **aspose pdf conversion** of PDFs to PNG, extracting embedded files, or building a web service that accepts PDFs and returns verified HTML snippets. + +Give it a try, tweak the options, and let us know what you discover. Happy coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/chinese/net/digital-signatures/_index.md b/pdf/chinese/net/digital-signatures/_index.md index 40a1290a4..dc59b61a8 100644 --- a/pdf/chinese/net/digital-signatures/_index.md +++ b/pdf/chinese/net/digital-signatures/_index.md @@ -26,6 +26,9 @@ ### [使用 Aspose.PDF 从 PDF 中提取数字签名信息](./extract-digital-signature-info-from-pdfs-aspose-pdf/) Aspose.PDF Net 代码教程 +### [如何从 PDF 中提取签名 – Aspose C# 指南](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +学习使用 Aspose.PDF for .NET 在 C# 中提取 PDF 文件的数字签名信息,帮助您分析和验证签名。 + ### [如何使用 Aspose.PDF for .NET 更改 PDF 签名语言](./change-pdf-signature-language-aspose-net/) 了解如何使用 Aspose.PDF for .NET 自定义 PDF 中的数字签名文本。非常适合多语言文档的准备和本地化。 @@ -58,12 +61,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,以实现文档的安全展示。 +### [验证 PDF 签名并添加 Bates 编号 – 完整 C# 指南](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +了解如何使用 Aspose.PDF for .NET 在 C# 中验证 PDF 签名并添加 Bates 编号,实现文档追踪与完整性保障的完整步骤。 + ## 其他资源 - [Aspose.PDF 用于网络文档](https://docs.aspose.com/pdf/net/) diff --git a/pdf/chinese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/chinese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..9f0c001a2 --- /dev/null +++ b/pdf/chinese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,247 @@ +--- +category: general +date: 2026-04-02 +description: 学习如何使用 Aspose.Pdf 在 C# 中提取签名、添加字段、添加空白页 PDF、添加小部件以及保留 PDF 的透明度。 +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: zh +og_description: 如何使用 Aspose.Pdf 从 PDF 中提取签名,并执行添加字段、空白页、小部件以及保留透明度等相关任务。 +og_title: 如何从 PDF 中提取签名 – Aspose C# 指南 +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: 如何从 PDF 中提取签名 – Aspose C# 指南 +url: /zh/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何从 PDF 中提取签名 – Aspose C# 指南 + +**How to extract signatures from a PDF** 是在自动化合同处理、发票审批或任何依赖数字签名的工作流时的常见需求。 +在本指南中,我们还将演示 **how to add field**、**add blank page PDF**、**how to add widget** 和 **preserve transparency PDF**,使用 Aspose.Pdf .NET 库。 + +想象一下,每晚你会收到数十个已签名的 PDF;手动打开每个文件来验证签名简直是噩梦。只需几行 C# 代码,你就可以以编程方式提取签名名称,保持原始图形完整,甚至在文档中添加新的表单字段——全部不破坏现有的透明度或色彩配置文件。 + +> **你将获得:** 一个完整、可运行的示例,能够将 PDF 转换为 PDF/X‑4(保留透明度),提取所有嵌入的签名名称,添加空白页,并创建一个在同一页面上出现两次的文本框表单字段。 + +## 前提条件 + +- .NET 6.0 或更高版本(代码同样适用于 .NET Framework) +- Aspose.Pdf for .NET **v25.2** 或更新版本(需要 `GetSignatureNames()`) +- 一个 Visual Studio 项目或任意 C# IDE +- 三个你自行管理的示例 PDF 文件: + - `source.pdf` – 需要在保持透明度的情况下进行转换的任意 PDF + - `signed.pdf` – 已经包含数字签名的 PDF + - (可选)用于输出文件的空文件夹 + +> **专业提示:** 如果你还没有授权副本,可以从 Aspose 官网申请免费临时许可证。免费模式可用于测试,但会添加水印。 + +## Step 1 – Preserve Transparency PDF by Converting to PDF/X‑4 + +将 PDF 扁平化时,透明度和嵌入的色彩配置文件常常会丢失。转换为 **PDF/X‑4** 可以保持这些视觉元素完整,这对印前文档至关重要。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**为什么重要:** +PDF/X‑4 是保留实时透明度的图形交换 PDF 的 ISO 标准。通过使用 `PdfFormatConversionOptions`,可以避免将透明对象光栅化的常见陷阱,从而防止文件体积急剧增大并降低质量。 + +## Step 2 – How to Extract Signatures from a PDF + +Aspose 在 25.2 版中引入了 `GetSignatureNames()`,使签名提取只需一行代码。该方法返回分配给每个数字签名字段的逻辑名称数组。 + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**预期结果:** 如果 `signed.pdf` 包含名为 *ManagerSig* 和 *ClientSig* 的两个签名,控制台将输出: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**边缘情况处理:** +- 如果 PDF 没有签名,`GetSignatureNames()` 返回空数组——不会抛出异常。 +- 对于签名字段损坏的 PDF,你可以将调用包装在 `try/catch` 中,记录错误而不中止整个流程。 + +## Step 3 – Add Blank Page PDF and Create a TextBox with Multiple Widgets + +添加新页面相对简单,但 **how to add field** 与 **how to add widget** 同时使用时需要一些细微处理。*widget* 是表单字段的可视化表示;你可以将多个 widget 附加到同一个逻辑字段,从而让相同的数据出现在多个位置。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**为什么使用多个 widget?** +假设你需要同一条评论同时出现在合同的正面和背面。将两个 widget 附加到同一字段后,用户在任意位置的修改都会自动同步到另一处。 + +**常见陷阱:** +- 忘记将字段添加到 `newDoc.Form` 会导致 widget 在 PDF 查看器中不可见。 +- 为两个 widget 使用相同的矩形坐标会导致它们堆叠在一起——请确保 `Rectangle` 的值不同。 + +## Step 4 – Putting It All Together: A Full, Runnable Example + +下面是一段完整程序,按顺序执行上述所有步骤。将其复制粘贴到新的控制台项目中,调整路径后运行即可。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### 预期输出 + +运行程序后,你应该会看到类似以下的输出: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +打开 `TextBoxMultipleWidgets.pdf`(使用 Adobe Acrobat Reader),你会发现两个标记为 **Comments** 的相同文本框——一个在顶部附近,另一个稍低一些。对其中一个进行输入时,另一个会即时同步更新。 + +## Frequently Asked Questions (FAQ) + +| Question | Answer | +|----------|--------| +| **Can I extract the actual signature bytes?** | `GetSignatureNames()` only returns logical names. To pull the certificate or signature value you need `SignatureField` objects (`document.Form["fieldName"] as SignatureField`). | +| **Does PDF/X‑4 conversion work on encrypted PDFs?** | Yes, as long as you supply the password via `Document.Open(file, password)`. | +| **What if I need more than two widgets?** | Just call `textBox.Widgets.Add()` for each additional `WidgetAnnotation`. | +| **Will the blank page inherit page size from the original PDF?** | The new page uses the default size (A4). You can pass a `Page` object with custom dimensions if needed. | +| **Is the code compatible with .NET Core?** | Absolutely—Aspose.Pdf is cross‑platform. Just reference the NuGet package in your .NET Core project. | + +## 结论 + +在本教程中,我们演示了 **how to extract signatures from PDF** 的实现,同时覆盖了 **how to add field**、**add blank page PDF**、**how to add widget** 与 **preserve transparency PDF** 的使用方法,基于 Aspose.Pdf for C#。现在,你拥有了一套完整的端到端解决方案,可直接嵌入任何文档处理流水线。 + +准备好迎接下一个挑战了吗?尝试将这些技术与 Aspose 的 OCR 模块结合,以读取扫描的 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/chinese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..7b7e4e11a --- /dev/null +++ b/pdf/chinese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,221 @@ +--- +category: general +date: 2026-04-02 +description: 快速验证 PDF 签名,并学习如何使用 Aspose.Pdf 添加贝茨编号。包括逐步代码和技巧。 +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: zh +og_description: 快速验证 PDF 签名,并学习如何使用 Aspose.Pdf 添加贝茨编号。遵循完整示例,避免常见陷阱。 +og_title: 验证 PDF 签名并添加贝茨编号 – 完整 C# 指南 +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: 验证 PDF 签名并添加 Bates 编号 – 完整 C# 指南 +url: /zh/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 验证 PDF 签名并添加 Bates 编号 – 完整 C# 指南 + +是否曾在发送合同前需要 **验证 PDF 签名**,却不确定该调用哪个 API?你并不孤单——许多开发者在处理具有法律效力的 PDF 时都会遇到这个难题。在本教程中,我们将一步步演示如何使用 Aspose.Pdf **验证 PDF 签名**,随后展示 **如何添加 Bates 编号**,让你的文件随时准备审计。 + +我们还会涉及 **如何以编程方式验证签名**、在一次操作中 **添加 Bates**,以及解释 **检查 PDF 签名** 的结果,让你对输出充满信心。完成后,你将拥有一个可运行的 C# 控制台应用,完成这两项任务——不再神秘,代码清晰可见。 + +--- + +## 你需要准备的环境 + +- **.NET 6.0** 或更高版本(示例同样适用于 .NET Framework 4.7+) +- **Aspose.Pdf for .NET** NuGet 包(版本 23.11 或更新) +- 一个已签名的 PDF 文件(`signed.pdf`),用于验证 +- 一个普通 PDF(`input.pdf`),用于添加 Bates 编号 + +只要准备好上述内容,即可开始。无需额外 SDK,也不需要隐藏的配置文件。 + +--- + +## 第一步:创建项目 + +先创建一个控制台项目: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +打开 `Program.cs` 并清空默认代码。我们将从零开始构建所有内容,方便你后续直接复制粘贴完整代码。 + +--- + +## 第二步:验证 PDF 签名 + +### 为什么要进行验证 + +如果底层证书被吊销或文档在签名后被篡改,数字签名就会 **被破坏**。Aspose.Pdf 提供了便利的 `IsSignatureCompromised` 方法,返回布尔值——简单却足以满足大多数审计流水线的需求。 + +### 代码片段 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**说明** + +- `Document` 将 PDF 加载到内存中。 +- `PdfFileSignature` 包装该文档并暴露与签名相关的方法。 +- `IsSignatureCompromised("Signature1")` 检查名为 *Signature1* 的签名完整性。 +- 布尔结果告诉你该签名是否仍然可信。 + +> **小技巧:** 如果不确定签名字段名称,可先调用 `pdfSignature.GetSignatureNames()`;它会返回所有签名标识的列表。 + +--- + +## 第三步:准备 Bates 编号选项 + +### 什么是 Bates 编号? + +Bates 编号是打印在法律或取证文档每页上的顺序标识,便于在发现或审计过程中快速引用页面。Aspose.Pdf 的 `BatesNumberingOptions` 让你在同一个对象中自定义前缀、起始号码、位数、对齐方式和边距。 + +### 代码续写 + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**说明** + +- `BatesNumberingOptions` 集中管理所有格式设置。 +- `AddBatesNumbering` 会自动遍历每一页——无需手动循环。 +- `Prefix`(`INV-`)和 `StartNumber`(1000)会生成 `INV-01000`、`INV-01001` 等标签。 +- 如需将编号位置调高或调低,可修改 `BottomMargin`。 + +--- + +## 第四步:运行完整示例 + +保存文件后,执行: + +```bash +dotnet run +``` + +你应该会看到两行控制台输出: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +如果第一行显示 `True`,则表示签名已被破坏——意味着文档在签名后可能被篡改,或证书已失效。此时应中止后续处理。 + +--- + +## 第五步:常见边缘情况及处理方式 + +| 场景 | 需要注意的点 | 建议的解决方案 | +|-----------|-------------------|---------------| +| **多个签名** | `IsSignatureCompromised` 只能一次检查一个字段。 | 循环 `pdfSignature.GetSignatureNames()`,逐个验证。 | +| **自定义签名字段名称** | 使用 `"Signature1"` 若名称不同会抛出异常。 | 先获取名称列表,或传入 Acrobat 中看到的确切名称。 | +| **大型 PDF(100+ 页)** | 添加 Bates 编号可能占用大量内存。 | 使用 `Document.Save` 并配合 `SaveOptions` 开启流式保存(`PdfSaveOptions { Compress = true }`)。 | +| **前缀包含非拉丁字符** | 某些字体默认不支持 Unicode。 | 将 `pdfWithBates.Font` 设置为支持 Unicode 的字体,如 `Arial Unicode MS`。 | +| **需要将编号放在左侧** | 对齐方式默认写死为 `Right`。 | 在 `BatesNumberingOptions` 中改为 `Alignment = HorizontalAlignment.Left`。 | + +--- + +## 第六步:手动验证结果(可选) + +在任意 PDF 查看器中打开 `BatesNumbered.pdf`: + +1. 翻阅页面——每页右下角应显示类似 **INV‑01000** 的标签。 +2. 使用 Acrobat 的 **签名面板**,双击签名并确认状态与控制台输出一致。 + +如果一切匹配,说明你已经成功 **检查 PDF 签名** 状态并 **添加 Bates 编号**,一次完成。 + +--- + +## 常见问答 + +**问:可以在不加载整个文档的情况下验证签名吗?** +答:Aspose.Pdf 在内部会对文件进行流式处理,但仍需创建 `Document` 实例。对于超大文件,可直接使用 `PdfFileSignature` 并传入文件流,以降低内存占用。 + +**问:使用 Aspose.Pdf 是否需要许可证?** +答:免费评估版可以使用,但会添加水印。生产环境建议购买正式许可证,否则输出的 PDF 会带有 Aspose 水印。 + +**问:如果只想给部分页面添加 Bates 编号怎么办?** +答:使用 `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })`,数组中列出需要编号的页码。 + +--- + +## 结论 + +现在,你已经掌握了 **如何使用 Aspose.Pdf 验证 PDF 签名**,了解了布尔结果背后的含义,并能够自信地 **添加 Bates 编号** 到任意 PDF。完整、可运行的示例将两项任务合并为一个控制台工具,既检查文档真实性,又为其贴上审计就绪的标识。 + +接下来,你可以进一步探索 **如何对签名进行根证书验证**,或尝试自定义 **添加 Bates 编号** 的样式,如对角水印或分段前缀。这些主题都建立在你刚刚掌握的基础之上,能够让文档处理流水线更加强大。 + +祝编码愉快,记住——只要有合适的代码,检查签名和给页面编号都是小菜一碟! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/chinese/net/printing-rendering/_index.md index c89319493..b7bcd9214 100644 --- a/pdf/chinese/net/printing-rendering/_index.md +++ b/pdf/chinese/net/printing-rendering/_index.md @@ -27,7 +27,7 @@ 通过本分步指南了解如何使用 Aspose.PDF .NET 将标准 PDF 文档转换为专业小册子。 ### [如何使用 Aspose.PDF for .NET 创建 PDF 小册子:分步指南](./create-pdf-booklet-aspose-pdf-net-guide/) -了解如何使用 Aspose.PDF for .NET 创建专业的 PDF 小册子。按照我们的分步指南,简化文档处理并增强您的演示文稿。 +了解如何使用 Aspose.PDF for .NET 创建专业的 PDF 小册子。按照我们的分步指南,简化文档处理并增强您的演示稿。 ### [如何在 C# 中使用 Aspose.PDF for .NET 从 PDF 打印特定页面](./print-specific-pages-pdf-aspose-net/) 学习如何使用 C# 和 Aspose.PDF for .NET 从 PDF 打印特定页面范围。按照本分步指南,高效管理文档。 @@ -50,6 +50,9 @@ ### [使用 Aspose.PDF for .NET 在 PDF 中设置自定义缩放比例 - 完整指南](./aspose-pdf-net-set-zoom-factor-pdfs/) 了解如何使用 Aspose.PDF for .NET 在 PDF 文档中设置自定义缩放比例。本指南涵盖安装、实施步骤和实际应用。 +### [如何在 C# 中渲染 PDF – PNG、HTML 与水印完整指南](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +学习使用 Aspose.PDF for .NET 在 C# 中将 PDF 渲染为 PNG、HTML,并添加水印的完整步骤。 + ## 其他资源 - [Aspose.PDF 用于网络文档](https://docs.aspose.com/pdf/net/) diff --git a/pdf/chinese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/chinese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..7cf5f9723 --- /dev/null +++ b/pdf/chinese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-04-02 +description: 如何在 C# 中使用 Aspose.PDF 渲染 PDF。学习将 PDF 渲染为 PNG、将 PDF 保存为 HTML,以及高效添加自动适配的文本水印。 +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: zh +og_description: 如何在 C# 中使用 Aspose.PDF 渲染 PDF。本指南展示了将 PDF 渲染为 PNG、保存为 HTML,以及创建自动适配的文字印章。 +og_title: 如何在 C# 中渲染 PDF – PNG、HTML 与自动适配印章 +tags: +- Aspose.PDF +- C# +- PDF processing +title: 如何在 C# 中渲染 PDF – PNG、HTML 与水印完整指南 +url: /zh/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 C# 中渲染 PDF – 完整指南:PNG、HTML 与水印 + +是否曾想过 **如何在 .NET 应用程序中渲染 PDF** 而不丢失任何字形?也许你尝试过快速的 `PdfRenderer` 却看到字符缺失,或者你需要一张清晰的 PNG 作为缩略图,但输出却显得锯齿状。我的经验表明,渲染选项与字体处理的正确组合决定了预览是崩溃还是像素完美的图像。 + +在本教程中,我们将通过 Aspose.PDF for .NET 演示三个真实场景:将 PDF 页面渲染为 PNG 并分析字体、添加会自动调整字体大小的 `TextStamp`,以及使用字体的 CMap 表将 PDF 保存为 HTML。完成后,你将能够 **渲染 PDF 为 PNG**、**将 PDF 页面转换为 PNG**、**导出 PDF 页面图像**,甚至 **将 PDF 保存为 HTML**,毫无障碍。 + +## 前置条件 + +- .NET 6.0 或更高版本(代码同样适用于 .NET Framework 4.6+) +- Aspose.PDF for .NET NuGet 包(`Install-Package Aspose.PDF`) +- 一个包含复杂字体的 PDF 文件(例如 `complexFonts.pdf`),用于渲染演示 +- 对 C# 和 Visual Studio(或任意你喜欢的 IDE)有基本了解 + +> **专业提示:** 如果你在 CI 服务器上运行,请确保 Aspose 许可证文件要么作为资源嵌入,要么通过环境变量引用,以避免评估水印。 + +--- + +## ## 如何使用字体分析将 PDF 渲染为 PNG + +### 为什么要分析字体? + +当 PDF 包含自定义或嵌入字体时,朴素的渲染可能会丢失渲染器无法映射的字形。启用 `AnalyzeFonts` 会强制 Aspose 检查字体流并替换缺失的字形,从而保证图像的忠实度。 + +### 步骤实现 + +1. **创建带有 `AnalyzeFonts` 的 `PngDevice`。** +2. **使用 `Document` 加载源 PDF。** +3. **处理目标页并将 PNG 写入磁盘。** + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**你应该看到的结果:** 在 `YOUR_DIRECTORY` 中生成名为 `rendered.png` 的文件,其外观与 `complexFonts.pdf` 的首页完全一致,包含所有特殊字符和变音符号。 + +![渲染的 PDF 页面为 PNG 图像](rendered.png "渲染的 PDF 页面为 PNG 图像") + +#### 常见陷阱及规避方法 + +- **服务器缺少字体:** 若 PDF 引用的字体未嵌入,请将这些字体放入应用程序的探测路径,或启用 `FontRepository` 指向自定义文件夹。 +- **大型 PDF:** 在循环中渲染多页会消耗大量内存;请及时释放每个 `Document` 实例,或使用下文示例中的 `using` 块。 + +--- + +## ## 添加自动适配的 TextStamp(动态文本渲染 PDF) + +### 何时需要动态大小的水印? + +想象一下你在生成发票时,需要在任意矩形区域覆盖一个 “PAID” 水印,无论文本长度如何都能恰好适配。手动计算字体大小容易出错;Aspose 的 `AutoAdjustFontSizeToFitStampRectangle` 能自动完成这项工作。 + +### 步骤实现 + +1. **配置带有自动调整属性的 `TextStamp`。** +2. **加载需要加水印的目标 PDF。** +3. **将水印添加到页面并保存结果。** + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**结果:** `stampAutoFit.pdf` 中的文本 “Important notice” 完美适配 300 × 150 pt 的矩形,无论原始字符串多长。 + +#### 需要注意的边缘情况 + +- **超长字符串:** 若文本即使在最小字体大小下仍超出矩形,Aspose 会根据 `WordWrapMode` 进行截断。你可以预先检查长度或增大矩形尺寸。 +- **多个水印:** 在不同页面复用同一 `TextStamp` 实例是可行的,但要记得位置属性(`Left`、`Top`)会保留上一次的值——需要时请重新设置。 + +--- + +## ## 使用字体的 CMap 表将 PDF 保存为 HTML + +### 为什么要使用 CMap 表? + +将 PDF 转换为 HTML 时,保持 Unicode 映射对于可搜索文本至关重要。基于 CMap 的策略会让 Aspose 优先使用字体内部的字符映射,通常比通用编码产生更准确的文本提取。 + +### 步骤实现 + +1. **创建带有 CMap 编码规则的 `HtmlSaveOptions`。** +2. **加载源 PDF。** +3. **使用配置好的选项保存为 HTML。** + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**你将得到的结果:** 一个文件夹(若 `SplitIntoPages` 为 true)包含 `cmapHtml.html` 及其相关资源。用浏览器打开 HTML,你会发现可选择、可搜索的文本几乎完美匹配原始 PDF。 + +#### 清晰 HTML 导出的技巧 + +- **图像 vs 矢量:** 若希望图形更锐利,可将 `RasterImagesSavingMode` 设置为 `RasterImagesSavingMode.AsEmbeddedPartsOfPng`,使用 PNG 而非 JPEG。 +- **大型 PDF:** 使用 `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` 将每页拆分,保持文件轻量。 + +--- + +## ## 完整工作示例 – 三种场景合并于同一项目 + +下面是一个自包含的控制台应用程序,演示这三种技术的并行使用。复制粘贴到新的 C# 控制台项目,添加 Aspose.PDF NuGet 包,并根据实际情况调整文件路径。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +运行程序后,你会在输出目录看到: + +- `rendered.png` – 首页的完美图像。 +- `stampAutoFit.pdf` – 原始 PDF 加上动态大小的 “Important notice” 水印。 +- `cmapHtml.html`(以及每页对应的 HTML 文件) – 保留原始文本编码的 HTML 版本。 + +--- + +## ## 常见问题解答 (FAQ) + +**Q: `AnalyzeFonts` 会增加渲染时间吗?** +A: 会略有增加,因为 Aspose 需要扫描每个字体流。但对于复杂 PDF 来说,避免缺字的收益通常更值得。 + +**Q: 能否在循环中渲染多页?** +A: 完全可以。只需遍历 `sourcePdf.Pages` 并调用 `pngDevice.Process(page, $"page{page.Number}.png")`。若分别打开文档,请记得释放每个 `Document`。 + +**Q: 如果 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 de6240eeb..4eda6d49c 100644 --- a/pdf/czech/net/conversion-export/_index.md +++ b/pdf/czech/net/conversion-export/_index.md @@ -29,6 +29,9 @@ Naučte se, jak převést XML data do profesionálních PDF dokumentů pomocí A ### [Komplexní průvodce: Převod PDF do HTML pomocí Aspose.PDF .NET s vlastními strategiemi](./convert-pdf-html-aspose-dotnet-custom-strategies/) Naučte se, jak převádět PDF do HTML pomocí vlastních strategií pomocí Aspose.PDF pro .NET. Zachovejte vysokou věrnost, efektivně zpracovávejte obrázky, fonty a CSS. +### [Převod PDF do HTML a ověření podpisu PDF – Kompletní průvodce Aspose .NET](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Naučte se převádět PDF do HTML a ověřovat digitální podpisy pomocí Aspose.PDF pro .NET s podrobnými ukázkami kódu. + ### [Komplexní průvodce: Převod PDF do TIFF pomocí Aspose.PDF .NET pro bezproblémovou konverzi dokumentů](./convert-pdf-to-tiff-aspose-dotnet-guide/) Naučte se, jak efektivně převádět soubory PDF do vysoce kvalitních obrázků TIFF pomocí Aspose.PDF pro .NET. Postupujte podle tohoto podrobného návodu a vylepšete si pracovní postup zpracování dokumentů. @@ -120,7 +123,7 @@ Naučte se, jak bez problémů převádět soubory TeX do PDF pomocí Aspose.PDF Naučte se, jak bez problémů převádět textové soubory do profesionálních PDF dokumentů pomocí Aspose.PDF pro .NET. Postupujte podle tohoto podrobného návodu s příklady kódu a tipy pro optimalizaci. ### [Převod XML do PDF v C# pomocí Aspose.PDF: Komplexní průvodce pro .NET vývojáře](./convert-xml-to-pdf-csharp-aspose-pdf-guide/) -Naučte se, jak efektivně převádět soubory XML do profesionálních PDF pomocí Aspose.PDF a C#. Postupujte podle tohoto podrobného návodu určeného pro vývojáře .NET. +Naučte se, jak efektivně převádět soubory XML do profesionálních PDF pomocí Aspose.PDF a C#. Postupujte podle tohoto podrobního návodu určeného pro vývojáře .NET. ### [Převod XML do PDF pomocí Aspose.PDF pro .NET: Podrobný návod](./convert-xml-pdf-aspose-dotnet/) Naučte se, jak transformovat XML data do stylizovaných PDF souborů pomocí Aspose.PDF a XSLT v .NET. Tato příručka se zabývá nastavením, kroky převodu a reálnými aplikacemi. diff --git a/pdf/czech/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/czech/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..a7f167d80 --- /dev/null +++ b/pdf/czech/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,258 @@ +--- +category: general +date: 2026-04-02 +description: Převést PDF na HTML při zachování vektorů, poté ověřit podpis PDF pomocí + Aspose PDF. Naučte se konverzi PDF pomocí Aspose a kontrolu digitálního podpisu + PDF v C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: cs +og_description: Převod PDF na HTML při zachování vektorů a ověření podpisu PDF pomocí + Aspose PDF. Krok za krokem C# kód, tipy a řešení okrajových případů. +og_title: Převod PDF na HTML a ověření PDF podpisu – Kompletní tutoriál Aspose .NET +tags: +- Aspose.PDF +- C# +- PDF processing +title: Převod PDF na HTML a ověření podpisu PDF – Kompletní průvodce Aspose .NET +url: /cs/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Převod PDF do HTML a ověření podpisu PDF – Kompletní tutoriál Aspose .NET + +Už jste někdy potřebovali **převést PDF do HTML**, ale obávali se ztráty vektorové kvality nebo poškození digitálních podpisů? Nejste v tom sami. Mnoho vývojářů narazí na problém, když PDF obsahuje jen vektorovou grafiku nebo digitální podpis založený na SHA‑3 – standardní konvertory buď rasterizují vše, nebo podpis úplně ignorují. + +V tomto průvodci projdeme praktické řešení pomocí **Aspose.Pdf** pro .NET: nejprve odstraníme rastrové obrázky a převodíme PDF obsahující jen vektory na čisté HTML, poté vám ukážeme, jak **ověřit podpis PDF** (ano, ten SHA‑3‑256) a zobrazit výsledek v konzoli. Na konci budete mít připravený C# program, který provádí oba úkoly, a také několik tipů, jak se vyhnout běžným úskalím. + +## Co budete potřebovat + +- **Aspose.Pdf for .NET** (nejnovější verze k 2026‑04, např. 23.12). +- Vývojové prostředí .NET (Visual Studio 2022 nebo VS Code s rozšířením C#). +- Dva ukázkové PDF soubory: + 1. `vectorOnly.pdf` – obsahuje pouze vektory a text, žádné rastrové obrázky. + 2. `signed_sha3.pdf` – digitálně podepsáno pomocí hash SHA‑3‑256. + +Žádné další NuGet balíčky kromě `Aspose.Pdf` nejsou potřeba. + +--- + +## Krok 1: Nastavení projektu a načtení PDF souborů + +Create a new console app, add the Aspose.Pdf NuGet, and bring the namespaces into scope. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Proč je to důležité*: Načtení dokumentů na začátku nám umožní znovu použít objekty jak pro konverzi, tak pro ověření podpisu, čímž udržíme nízkou spotřebu paměti. + +--- + +## Krok 2: Převod PDF do HTML s vynecháním rastrových obrázků + +Aspose.Pdf’s `HtmlSaveOptions` gives you fine‑grained control over how images are handled. Setting `RasterImagesSavingMode` to `Skip` tells the library to ignore raster pictures entirely—perfect for a vector‑only source. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Expected output**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Tip*: Pokud později potřebujete vložit HTML do webové stránky, vygenerovaný soubor obsahuje jen SVG a CSS – žádné objemné PNG/JPEG bloky. + +--- + +## Krok 3: Připravte obslužnou třídu podpisu + +Aspose.Pdf’s `PdfFileSignature` class is the entry point for any digital‑signature work. It reads the signature dictionary, extracts the name, and lets you verify using a specific hash algorithm. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Proč je tento krok klíčový*: Bez obslužné třídy nemůžete vyjmenovat podpisy ani zvolit požadovaný hash algoritmus (např. SHA‑3‑256). + +--- + +## Krok 4: Vyjmenujte a ověřte každý podpis pomocí SHA‑3‑256 + +The `GetSignNames()` method returns every signature label in the PDF. Loop through them, call `VerifySignature` with `DigestHashAlgorithm.Sha3_256`, and print the result. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Sample console output**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Hraniční případ*: Pokud podpis používá jiný hash (např. SHA‑256), ověření vrátí `False`. Můžete přidat kontrolu záložního algoritmu tím, že v cyklu vyzkoušíte další hodnoty `DigestHashAlgorithm`. + +--- + +## Krok 5: Kompletní funkční příklad (veškerý kód na jednom místě) + +Below is the complete program you can copy‑paste into `Program.cs`. Replace `YOUR_DIRECTORY` with the actual folder where your PDFs live. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Spusťte program (`dotnet run` nebo stiskněte **F5** ve Visual Studiu). Měli byste vidět potvrzení o konverzi následované výsledky ověření podpisu. + +--- + +## Často kladené otázky a jak je řešit + +| Question | Answer | +|----------|--------| +| **Obsahuje HTML stále původní písma?** | Aspose.Pdf ve výchozím nastavení vkládá použité písma jako base‑64 data URI, takže výstup se vykreslí správně i v případě, že hostitelský počítač tyto písma nemá. | +| **Co když moje PDF obsahuje jak vektory, *tak* obrázky?** | Nechte `RasterImagesSavingMode = Skip`, aby se obrázky vynechaly, nebo přepněte na `EmbedAll`, pokud je potřebujete. Volba je platná pro každou konverzi, takže můžete provést dva průchody, pokud potřebujete obě verze. | +| **Můj podpis používá SHA‑512 – jak ho ověřím?** | Nahraďte `DigestHashAlgorithm.Sha3_256` za `DigestHashAlgorithm.Sha512`. Můžete dokonce detekovat algoritmus ze slovníku podpisu a vybrat jej dynamicky. | +| **Je možné získat podrobnosti o certifikátu podepisujícího?** | Ano. Po ověření zavolejte `signatureHandler.GetSignatureInfo(signName).Certificate`, abyste získali X.509 certifikát a prozkoumali pole jako `Subject` a `Issuer`. | +| **Co když je PDF chráněno heslem?** | Načtěte jej pomocí `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. Zbytek pracovního postupu zůstane stejný. | + +--- + +## Profesionální tipy pro produkční kód + +1. **Správně uvolňujte PDF** – Zabalte instance `PdfDocument` do bloku `using` nebo zavolejte `Dispose()`, aby se uvolnily nativní zdroje. +2. **Dávkové zpracování** – Pokud máte desítky PDF, projděte adresář, uložte výsledky do CSV a paralelizujte konverzi pomocí `Parallel.ForEach`. +3. **Logování** – Nahraďte `Console.WriteLine` strukturovaným loggerem (Serilog, NLog) pro lepší sledovatelnost, zejména při ověřování mnoha podpisů. +4. **Zpracování chyb** – Zachyťte `Aspose.Pdf.Exceptions`, abyste poškozené soubory ošetřili elegantně: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Kompatibilita verzí** – Aspose.Pdf se rychle vyvíjí. Vždy testujte s přesnou verzí uvedenou ve vašem `csproj`. Ukázané API funguje pro verze 23.x a novější. + +--- + +## Závěr + +Právě jsme **převáděli PDF do HTML** při zachování pouze vektorů a textu a **ověřili podpis PDF** pomocí algoritmu SHA‑3‑256 – vše pomocí několika řádků C#. Hlavní poznatky jsou: + +- Použijte `HtmlSaveOptions.RasterImagesSavingMode = Skip` pro čisté HTML jen s vektory. +- Využijte `PdfFileSignature` a `DigestHashAlgorithm.Sha3_256` k **spolehlivému ověření digitálního podpisu PDF**. + +Odtud můžete zkoumat související témata, jako je **aspose pdf conversion** PDF do PNG, extrahování vložených souborů nebo tvorba webové služby, která přijímá PDF a vrací ověřené HTML úryvky. + +Vyzkoušejte to, upravte možnosti a dejte nám vědět, co objevíte. Šťastné kódování! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/czech/net/digital-signatures/_index.md b/pdf/czech/net/digital-signatures/_index.md index 8b518b22c..afd3b839f 100644 --- a/pdf/czech/net/digital-signatures/_index.md +++ b/pdf/czech/net/digital-signatures/_index.md @@ -33,6 +33,9 @@ Naučte se, jak bezpečně vytvářet, podepisovat a ověřovat podpisy PDF pomo ### [Jak extrahovat informace o podpisu PDF pomocí Aspose.PDF .NET: Podrobný návod](./extract-pdf-signature-info-aspose-pdf-net/) Naučte se, jak extrahovat informace o digitálním podpisu z PDF souborů pomocí Aspose.PDF pro .NET. Tato podrobná příručka zahrnuje instalaci, implementaci a praktické aplikace. +### [Jak extrahovat podpisy z PDF – Aspose C# průvodce](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Naučte se, jak pomocí Aspose.PDF v C# extrahovat digitální podpisy z PDF souborů a získat jejich podrobnosti. + ### [Jak implementovat digitální podpisy v .NET s Aspose.PDF: Komplexní průvodce](./implement-pdf-signatures-dotnet-aspose-pdf-guide/) Naučte se, jak implementovat zabezpečené digitální podpisy v PDF souborech pomocí Aspose.PDF pro .NET, včetně potlačení volitelných polí. @@ -56,12 +59,16 @@ Naučte se, jak ověřovat digitální podpisy v souborech PDF pomocí Aspose.PD ### [Ověření podpisu PDF v C# – Kompletní průvodce validací digitálního podpisu PDF](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) Naučte se, jak ověřit digitální podpis PDF pomocí C# s Aspose.PDF pro .NET. Kompletní průvodce krok za krokem. + ### [Načtení PDF dokumentu C# – Konverze na PDF/X‑4 a výpis podpisů](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) Naučte se načíst PDF v C#, převést jej na PDF/X‑4 a získat seznam digitálních podpisů. ### [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. +### [Ověření podpisu PDF a přidání Batesova číslování – Kompletní průvodce v C#](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Naučte se, jak ověřit digitální podpis PDF a přidat Batesovo číslování pomocí Aspose.PDF v C#. + ## Další zdroje - [Aspose.PDF pro síťovou dokumentaci](https://docs.aspose.com/pdf/net/) diff --git a/pdf/czech/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/czech/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..70ba7e47d --- /dev/null +++ b/pdf/czech/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,249 @@ +--- +category: general +date: 2026-04-02 +description: Naučte se, jak extrahovat podpisy, přidat pole, přidat prázdnou stránku + PDF, jak přidat widget a zachovat průhlednost PDF pomocí Aspose.Pdf v C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: cs +og_description: Jak extrahovat podpisy z PDF a provádět související úkoly, jako je + přidávání polí, prázdných stránek, widgetů a zachování průhlednosti pomocí Aspose.Pdf. +og_title: Jak extrahovat podpisy z PDF – Průvodce Aspose C# +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Jak extrahovat podpisy z PDF – Průvodce Aspose C# +url: /cs/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak extrahovat podpisy z PDF – Průvodce Aspose C# + +**Jak extrahovat podpisy z PDF** je častý požadavek při automatizaci zpracování smluv, schvalování faktur nebo jakéhokoli pracovního postupu, který se spoléhá na digitální podpisy. +V tomto průvodci si také ukážeme **jak přidat pole**, **přidat prázdnou stránku PDF**, **jak přidat widget** a **zachovat průhlednost PDF** pomocí knihovny Aspose.Pdf pro .NET. + +Představte si, že každou noc obdržíte desítky podepsaných PDF; ruční otevírání každého souboru za účelem ověření podpisů by bylo noční můrou. S několika řádky C# kódu můžete programově získat jména podpisů, zachovat původní grafiku a dokonce obohatit dokument o nová formulářová pole – a to vše bez narušení existující průhlednosti nebo barevných profilů. + +> **Co získáte:** kompletní, spustitelný příklad, který převádí PDF na PDF/X‑4 (zachovává průhlednost), extrahuje každé vložené jméno podpisu, přidá prázdnou stránku a vytvoří textové pole formuláře, které se objeví na dvou místech na stejné stránce. + +## Požadavky + +- .NET 6.0 nebo novější (kód funguje i s .NET Framework) +- Aspose.Pdf pro .NET **v25.2** nebo novější (vyžadováno pro `GetSignatureNames()`) +- Projekt ve Visual Studiu nebo jakékoli C# IDE +- Tři ukázkové PDF v adresáři, který ovládáte: + - `source.pdf` – libovolné PDF, které chcete převést a zachovat průhlednost + - `signed.pdf` – PDF, které již obsahuje digitální podpisy + - (volitelné) prázdný adresář pro výstupní soubory + +> **Tip:** Pokud ještě nemáte licencovanou kopii, můžete si požádat o bezplatnou dočasnou licenci na webu Aspose. Bezplatný režim funguje pro testování, ale přidává vodoznak. + +## Krok 1 – Zachovat průhlednost PDF převodem na PDF/X‑4 + +Průhlednost a vložené barevné profily se často ztratí při zploštění PDF. Převod na **PDF/X‑4** zachová tyto vizuální prvky, což je klíčové pro tiskové dokumenty připravené k tisku. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Proč je to důležité:** +PDF/X‑4 je ISO standard pro grafické výměnné PDF, které si zachovávají živou průhlednost. Použitím `PdfFormatConversionOptions` se vyhnete běžné pasti rasterizace průhledných objektů, což může dramaticky zvýšit velikost souboru a zhoršit kvalitu. + +## Krok 2 – Jak extrahovat podpisy z PDF + +Aspose zavedl `GetSignatureNames()` ve verzi 25.2, což umožňuje extrahovat podpisy jedním řádkem. Metoda vrací pole logických názvů přiřazených každému poli digitálního podpisu. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**Co očekávat:** Pokud `signed.pdf` obsahuje dva podpisy pojmenované *ManagerSig* a *ClientSig*, konzole vypíše: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Zvládání okrajových případů:** +- Pokud PDF neobsahuje žádné podpisy, `GetSignatureNames()` vrátí prázdné pole – nevyvolá výjimku. +- U PDF s poškozenými poli podpisu můžete volání zabalit do `try/catch` a zaznamenat chybu, aniž byste přerušili celý proces. + +## Krok 3 – Přidat prázdnou stránku PDF a vytvořit TextBox s více widgety + +Přidání nové stránky je jednoduché, ale **jak přidat pole** a **jak přidat widget** najednou vyžaduje trochu nuance. *Widget* je vizuální reprezentace formulářového pole; můžete k jednomu logickému poli připojit několik widgetů, což umožní, aby se stejná data zobrazovala na více místech. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Proč používat více widgetů?** +Představte si, že potřebujete stejný komentář zobrazit jak na přední, tak na zadní straně smlouvy. Připojením dvou widgetů ke stejnému poli se jakákoli změna provedená uživatelem na jednom místě automaticky projeví i na druhém. + +**Časté úskalí:** +- Zapomenutí přidat pole do `newDoc.Form` způsobí, že widget bude v PDF prohlížečích neviditelný. +- Použití identických souřadnic obdélníku pro oba widgety je způsobí, že se překryjí – ujistěte se, že hodnoty `Rectangle` se liší. + +## Krok 4 – Spojení všeho dohromady: Kompletní spustitelný příklad + +Níže je jeden program, který provede každý krok v uvedeném pořadí. Zkopírujte jej do nového konzolového projektu, upravte cesty a spusťte. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Očekávaný výstup + +Po spuštění programu byste měli vidět něco jako: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Otevřete `TextBoxMultipleWidgets.pdf` v Adobe Acrobat Reader; všimnete si dvou identických textových polí označených **Comments** – jedno blízko horní části, druhé o něco níže. Psaní do jednoho okamžitě aktualizuje druhé. + +## Často kladené otázky (FAQ) + +| Otázka | Odpověď | +|----------|--------| +| **Mohu extrahovat skutečné bajty podpisu?** | `GetSignatureNames()` vrací jen logické názvy. Pro získání certifikátu nebo hodnoty podpisu potřebujete objekty `SignatureField` (`document.Form["fieldName"] as SignatureField`). | +| **Funguje převod na PDF/X‑4 u šifrovaných PDF?** | Ano, pokud zadáte heslo pomocí `Document.Open(file, password)`. | +| **Co když potřebuji více než dva widgety?** | Stačí volat `textBox.Widgets.Add()` pro každý další `WidgetAnnotation`. | +| **Zdědí prázdná stránka velikost stránky z původního PDF?** | Nová stránka používá výchozí velikost (A4). Pokud potřebujete jinou velikost, můžete předat objekt `Page` s vlastními rozměry. | +| **Je kód kompatibilní s .NET Core?** | Rozhodně – Aspose.Pdf je multiplatformní. Stačí přidat NuGet balíček do vašeho .NET Core projektu. | + +## Závěr + +V tomto tutoriálu jsme ukázali **jak extrahovat podpisy z PDF** souborů a zároveň pokryli **jak přidat pole**, **přidat prázdnou stránku PDF**, **jak přidat widget** a **zachovat průhlednost PDF** pomocí Aspose.Pdf pro C#. Nyní máte robustní end‑to‑end řešení, které můžete vložit do jakéhokoli pipeline pro zpracování dokumentů. + +Jste připraveni na další výzvu? Vyzkoušejte kombinaci těchto technik s OCR modulem Aspose pro čtení textu ze skenovaných + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/czech/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..801db8947 --- /dev/null +++ b/pdf/czech/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,207 @@ +--- +category: general +date: 2026-04-02 +description: Rychle ověřte podpis PDF a naučte se, jak přidat číslování Bates pomocí + Aspose.Pdf. Obsahuje krok‑za‑krokem kód a tipy. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: cs +og_description: Rychle ověřte podpis PDF a naučte se, jak pomocí Aspose.Pdf přidat + Batesovo číslování. Sledujte kompletní příklad a vyhněte se běžným úskalím. +og_title: Ověření PDF podpisu a přidání Batesova číslování – kompletní průvodce C# +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: Ověření PDF podpisu a přidání Batesova číslování – kompletní průvodce C# +url: /cs/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Ověření PDF podpisu a přidání Bates číslování – Kompletní průvodce v C# + +Už jste někdy potřebovali **ověřit PDF podpis** před odesláním smlouvy, ale nebyli jste si jisti, kterou API metodu použít? Nejste sami — mnoho vývojářů narazí na tento problém při práci s právně závaznými PDF. V tomto tutoriálu vám ukážeme, jak **ověřit PDF podpis** pomocí Aspose.Pdf a poté vám ukážeme, **jak přidat Bates číslování**, aby vaše soubory byly připravené na audit. + +Také se podíváme na **jak programově ověřit podpis**, pokryjeme **jak přidat Bates** v jednom průchodu a vysvětlíme **výsledky kontroly PDF podpisu**, abyste mohli výstup důvěřovat. Na konci budete mít spustitelnou C# konzolovou aplikaci, která provádí oba úkoly — žádná záhada, jen přehledný kód. + +--- + +## Co budete potřebovat + +- **.NET 6.0** nebo novější (příklad funguje také s .NET Framework 4.7+) +- **Aspose.Pdf for .NET** NuGet balíček (verze 23.11 nebo novější) +- Podepsaný PDF soubor (`signed.pdf`), který chcete ověřit +- Prostý PDF (`input.pdf`), který bude obsahovat Bates čísla + +Pokud je máte, můžete začít. Žádné další SDK, žádné skryté konfigurační soubory. + +## Krok 1: Nastavení projektu + +Začněte vytvořením konzolového projektu: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Otevřete `Program.cs` a odstraňte výchozí kód. Všechno postavíme od začátku, abyste později mohli zkopírovat finální verzi. + +## Krok 2: Ověření PDF podpisu + +### Proč je ověření důležité + +Digitální podpis může být **kompromitován**, pokud je podkladový certifikát odvolán nebo byl dokument po podpisu pozměněn. Aspose.Pdf poskytuje užitečnou metodu `IsSignatureCompromised`, která vrací boolean — jednoduché, ale dostatečně silné pro většinu auditních procesů. + +### Ukázka kódu + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Vysvětlení** + +- `Document` načte PDF do paměti. +- `PdfFileSignature` obaluje dokument a poskytuje metody související s podpisem. +- `IsSignatureCompromised("Signature1")` kontroluje integritu podpisu pojmenovaného *Signature1*. +- Boolean výsledek vám říká, zda je podpis stále důvěryhodný. + +> **Tip:** Pokud si nejste jisti názvem pole podpisu, nejprve zavolejte `pdfSignature.GetSignatureNames()`; vrátí seznam všech identifikátorů podpisů. + +## Krok 3: Připravte možnosti Bates číslování + +### Co je Bates číslování? + +Bates čísla jsou sekvenční identifikátory tištěné na každé stránce právního nebo forenzního dokumentu. Usnadňují odkazování na stránky během vyhledávání nebo auditních procesů. `BatesNumberingOptions` v Aspose.Pdf vám umožňuje přizpůsobit předponu, počáteční číslo, počet číslic, zarovnání a okraj — vše v jednom objektu. + +### Pokračování kódu + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Vysvětlení** + +- `BatesNumberingOptions` centralizuje všechna nastavení formátování. +- `AddBatesNumbering` automaticky prochází každou stránku — není potřeba ruční smyčka. +- `Prefix` (`INV-`) a `StartNumber` (1000) vytvářejí štítky jako `INV-01000`, `INV-01001` atd. +- Upravit `BottomMargin`, pokud potřebujete číslo výše nebo níže na stránce. + +## Krok 4: Spusťte kompletní příklad + +Uložte soubor a poté spusťte: + +```bash +dotnet run +``` + +Měli byste vidět dva řádky v konzoli: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Pokud první řádek vypíše `True`, podpis je kompromitován — to znamená, že dokument mohl být po podpisu změněn nebo certifikát již není platný. V takovém případě přerušte jakékoli následné zpracování. + +## Krok 5: Běžné okrajové případy a jak je řešit + +| Situace | Na co si dát pozor | Navrhované řešení | +|-----------|-------------------|---------------| +| **Více podpisů** | `IsSignatureCompromised` kontroluje pouze jedno pole najednou. | Procházejte `pdfSignature.GetSignatureNames()` a ověřte každý. | +| **Vlastní název pole podpisu** | Použití `"Signature1"` může vyvolat výjimku, pokud se název liší. | Nejprve načtěte seznam názvů, nebo předávejte přesný název, který vidíte v Acrobat. | +| **Velké PDF (100+ stran)** | Přidávání Bates čísel může být náročné na paměť. | Použijte `Document.Save` s `SaveOptions`, které umožňují streamování (`PdfSaveOptions { Compress = true }`). | +| **Ne-latinské znaky v předponě** | Některá písma ve výchozím nastavení nepodporují Unicode. | Nastavte `pdfWithBates.Font` na Unicode‑kompatibilní písmo, např. `Arial Unicode MS`. | +| **Potřeba umístit čísla vlevo** | Zarovnání je pevně nastaveno na `Right`. | Změňte `Alignment = HorizontalAlignment.Left` v `BatesNumberingOptions`. | + +## Krok 6: Ověřte výsledek ručně (volitelné) + +Otevřete `BatesNumbered.pdf` v libovolném PDF prohlížeči: + +1. Projděte stránky — každá by měla zobrazovat štítek jako **INV‑01000** v pravém dolním rohu. +2. Použijte **Panel podpisů** v Acrobat a dvojklikněte na podpis, abyste potvrdili, že stav odpovídá výstupu v konzoli. + +Pokud vše souhlasí, úspěšně jste **zkontrolovali stav PDF podpisu** a aplikovali **přidání Bates číslování** najednou. + +## Často kladené otázky + +**Q: Mohu ověřit podpis bez načtení celého dokumentu?** +**A:** Aspose.Pdf soubor streamuje pod kapotou, ale stále potřebujete instanci `Document`. Pro obrovské soubory zvažte použití `PdfFileSignature` přímo s file streamem, abyste snížili paměťovou náročnost. + +**Q: Potřebuji licenci pro Aspose.Pdf?** +**A:** Bezplatná zkušební verze funguje, ale přidává vodoznak. Pro produkci budete potřebovat řádnou licenci; jinak budou výstupní PDF obsahovat banner Aspose. + +**Q: Co když potřebuji přidat Bates čísla jen na podmnožinu stránek?** +**A:** Použijte `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })`, kde pole uvádí čísla stránek, které chcete číslovat. + +## Závěr + +Nyní víte, **jak ověřit PDF podpis** pomocí Aspose.Pdf, rozumíte významu boolean výsledku a můžete s jistotou **přidat Bates číslování** do libovolného PDF, které máte pod kontrolou. Kompletní, spustitelný příklad kombinuje oba úkoly a poskytuje vám jediný konzolový nástroj, který kontroluje pravost dokumentu a označuje jej auditně připravenými identifikátory. + +Dále můžete zkoumat **jak ověřit podpis** vůči důvěryhodnému kořenovému úložišti, nebo experimentovat s vlastním stylem **přidání Bates číslování**, například diagonálními razítky nebo předponami podle sekcí. Obě témata staví na základech, které jste právě zvládli, a učiní váš pipeline pro zpracování dokumentů ještě robustnější. + +Šťastné programování a pamatujte — kontrola podpisů a číslování stránek je hračka, jakmile máte správný kód! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/czech/net/printing-rendering/_index.md index a3da536ec..a3f833f8c 100644 --- a/pdf/czech/net/printing-rendering/_index.md +++ b/pdf/czech/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Naučte se, jak efektivně tisknout konkrétní stránky PDF pomocí nástroje A ### [Nastavení vlastního faktoru přiblížení v PDF pomocí Aspose.PDF pro .NET - Kompletní průvodce](./aspose-pdf-net-set-zoom-factor-pdfs/) Naučte se, jak nastavit vlastní faktor přiblížení v dokumentech PDF pomocí Aspose.PDF pro .NET. Tato příručka popisuje instalaci, implementační kroky a praktické aplikace. +### [Jak renderovat PDF v C# – Kompletní průvodce PNG, HTML a razítkováním](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Naučte se, jak renderovat PDF do formátů PNG a HTML a aplikovat razítka pomocí Aspose.PDF pro .NET. + ## Další zdroje - [Aspose.PDF pro síťovou dokumentaci](https://docs.aspose.com/pdf/net/) diff --git a/pdf/czech/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/czech/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..34cdfdff1 --- /dev/null +++ b/pdf/czech/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-04-02 +description: Jak renderovat PDF pomocí Aspose.PDF v C#. Naučte se převádět PDF na + PNG, uložit PDF jako HTML a efektivně přidávat automaticky přizpůsobené textové + razítka. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: cs +og_description: Jak renderovat PDF pomocí Aspose.PDF v C#. Tento průvodce ukazuje + renderování PDF do PNG, uložení jako HTML a vytvoření automaticky přizpůsobených + textových razítek. +og_title: Jak renderovat PDF v C# – PNG, HTML a automaticky přizpůsobené razítka +tags: +- Aspose.PDF +- C# +- PDF processing +title: Jak renderovat PDF v C# – Kompletní průvodce PNG, HTML a razítkováním +url: /cs/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak renderovat PDF v C# – Kompletní průvodce PNG, HTML a Vodoznakem + +Už jste se někdy zamysleli **jak renderovat PDF** v .NET aplikaci, aniž byste ztratili jediný glyf? Možná jste vyzkoušeli rychlý `PdfRenderer` a viděli chybějící znaky, nebo potřebujete ostrý PNG pro miniaturu, ale výstup vypadá zubatě. Podle mé zkušenosti je správná kombinace možností renderování a správy fontů rozdílem mezi poškozeným náhledem a pixel‑perfektním obrázkem. + +V tomto tutoriálu projdeme tři reálné scénáře s Aspose.PDF pro .NET: renderování stránky PDF do PNG při analýze fontů, přidání `TextStamp`, který automaticky mění velikost písma, a uložení PDF jako HTML pomocí CMap tabulky fontu. Na konci budete schopni **renderovat PDF do PNG**, **převést stránku PDF na PNG**, **exportovat obrázek stránky PDF** a dokonce **uložit PDF jako HTML** bez problémů. + +## Požadavky + +- .NET 6.0 nebo novější (kód funguje také na .NET Framework 4.6+) +- NuGet balíček Aspose.PDF pro .NET (`Install-Package Aspose.PDF`) +- PDF soubor s komplexními fonty (např. `complexFonts.pdf`) pro demonstrační renderování +- Základní znalost C# a Visual Studio (nebo jakéhokoli IDE, které preferujete) + +> **Tip:** Pokud běžíte na CI serveru, ujistěte se, že licenční soubor Aspose je buď vložený jako zdroj, nebo odkazovaný přes proměnnou prostředí, aby se předešlo vodotiskům z evaluační verze. + +## ## Jak renderovat PDF do PNG s analýzou fontů + +### Proč analyzovat fonty? + +Když PDF obsahuje vlastní nebo vložené fonty, naivní render může vynechat glyfy, které renderovací engine nedokáže namapovat. Povolení `AnalyzeFonts` přinutí Aspose prozkoumat fontové streamy a nahradit chybějící glyfy, což zaručuje věrný obrázek. + +### Krok‑za‑krokem implementace + +1. **Vytvořte `PngDevice` s povoleným `AnalyzeFonts`.** +2. **Načtěte zdrojové PDF** pomocí `Document`. +3. **Zpracujte požadovanou stránku** a uložte PNG na disk. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**Co byste měli vidět:** Soubor pojmenovaný `rendered.png` v `YOUR_DIRECTORY`, který vypadá identicky jako první stránka `complexFonts.pdf`, včetně všech speciálních znaků a diakritiky. + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### Časté úskalí a jak se jim vyhnout + +- **Chybějící fonty na serveru:** Pokud PDF odkazuje na fonty, které nejsou vloženy, umístěte tyto fonty do cesty pro prohledávání aplikace nebo povolte `FontRepository`, aby ukazoval na vlastní složku. +- **Velké PDF:** Renderování mnoha stránek ve smyčce může spotřebovat paměť; okamžitě uvolněte každou instanci `Document` nebo použijte bloky `using`, jak je ukázáno. + +## ## Přidání Auto‑Fit TextStamp (Render PDF s dynamickým textem) + +### Kdy byste potřebovali dynamicky velikostní razítko? + +Představte si, že generujete faktury a potřebujete překrýt vodoznak „PAID“, který se vejde do libovolného obdélníku, který zvolíte, bez ohledu na délku textu. Ruční výpočet velikosti písma je náchylný k chybám; Aspose `AutoAdjustFontSizeToFitStampRectangle` udělá těžkou práci. + +### Krok‑za‑krokem implementace + +1. **Nakonfigurujte `TextStamp`** s vlastnostmi automatického přizpůsobení. +2. **Načtěte cílové PDF**, které chcete označit. +3. **Přidejte razítko na stránku** a uložte výsledek. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Výsledek:** `stampAutoFit.pdf` obsahuje text „Important notice“ dokonale přizpůsobený obdélníku 300 × 150 pt, bez ohledu na původní délku řetězce. + +#### Okrajové případy, které je třeba zvážit + +- **Velmi dlouhé řetězce:** Pokud text přesáhne obdélník i při nejmenší velikosti písma, Aspose jej ořízne podle `WordWrapMode`. Můžete předem zkontrolovat délku nebo zvětšit velikost obdélníku. +- **Více razítek:** Opětovné použití stejné instance `TextStamp` na různých stránkách funguje, ale pamatujte, že vlastnosti pozice (`Left`, `Top`) si zachovají poslední hodnoty – resetujte je podle potřeby. + +## ## Uložení PDF jako HTML pomocí CMap tabulky fontu + +### Proč se obtěžovat s CMap tabulkou? + +Při konverzi PDF do HTML je zachování Unicode mapování klíčové pro prohledávatelný text. Strategie založená na CMap přinutí Aspose upřednostnit interní mapu znaků fontu, což často poskytuje přesnější extrakci textu než obecné kódování. + +### Krok‑za‑krokem implementace + +1. **Vytvořte `HtmlSaveOptions`** s pravidlem kódování založeným na CMap. +2. **Načtěte zdrojové PDF**. +3. **Uložte jako HTML** pomocí nakonfigurovaných možností. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**Co získáte:** Složku (pokud je `SplitIntoPages` nastaveno na true) obsahující `cmapHtml.html` a související zdroje. Otevřete HTML v prohlížeči a všimnete si, že text je vybratelný a prohledávatelný a téměř dokonale odpovídá originálnímu PDF. + +#### Tipy pro čistý HTML export + +- **Obrázky vs. vektory:** Nastavte `RasterImagesSavingMode` na `RasterImagesSavingMode.AsEmbeddedPartsOfPng`, pokud dáváte přednost PNG před JPEG pro ostřejší grafiku. +- **Velké PDF:** Použijte `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages`, aby každá stránka byla lehká. + +## ## Kompletní funkční příklad – Všechny tři scénáře v jednom projektu + +Níže je samostatná konzolová aplikace, která demonstruje tři techniky vedle sebe. Zkopírujte ji do nového C# konzolového projektu, přidejte NuGet balíček Aspose.PDF a upravte cesty k souborům. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Spusťte program a najdete: + +- `rendered.png` – dokonalý obrázek první stránky PDF. +- `stampAutoFit.pdf` – originální PDF s dynamicky velikostním razítkem „Important notice“. +- `cmapHtml.html` (plus soubory HTML pro jednotlivé stránky) – HTML verze, která zachovává původní kódování textu. + +## ## Často kladené otázky (FAQ) + +**Q: Zvyšuje `AnalyzeFonts` dobu renderování?** +A: Mírně, protože Aspose prochází každý fontový stream. Tento kompromis je obvykle stojí za to u komplexních PDF, kde jsou chybějící glyfy nepřijatelné. + +**Q: Můžu renderovat více stránek ve smyčce?** +A: Rozhodně. Stačí iterovat přes `sourcePdf.Pages` a volat `pngDevice.Process(page, $"page{page.Number}.png")`. Nezapomeňte uvolnit každou `Document`, pokud je otevíráte samostatně. + +**Q: Co když + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 d41a94665..a54c51046 100644 --- a/pdf/dutch/net/conversion-export/_index.md +++ b/pdf/dutch/net/conversion-export/_index.md @@ -221,7 +221,10 @@ Leer hoe u PDF-documenten naar HTML converteert met externe PNG-afbeeldingen met ### [PDF naar HTML-conversie met Aspose.PDF .NET: een uitgebreide handleiding](./aspose-pdf-net-pdf-to-html-conversion/) Beheers PDF-naar-HTML-conversie met Aspose.PDF voor .NET. Verbeter de toegankelijkheid en interactie van uw documenten met aanpasbare opties. -### [PDF naar HTML-conversie met Aspose.PDF voor .NET](./pdf-to-html-conversion-aspose-dot-net/) +### [PDF naar HTML converteren en PDF-handtekening verifiëren – volledige Aspose .NET-gids](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Leer hoe u PDF's naar HTML converteert en de digitale handtekening controleert met Aspose.PDF voor .NET. + +### [PDF naar HTML converteren met Aspose.PDF .NET](./pdf-to-html-conversion-aspose-dot-net/) Een codetutorial voor Aspose.PDF Net ### [PDF naar TIFF-conversie in .NET met Aspose.PDF: een stapsgewijze handleiding](./pdf-to-tiff-conversion-aspose-pdf-net/) diff --git a/pdf/dutch/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/dutch/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..50334f5a4 --- /dev/null +++ b/pdf/dutch/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,261 @@ +--- +category: general +date: 2026-04-02 +description: Converteer PDF naar HTML terwijl vectoren behouden blijven, controleer + vervolgens de PDF-handtekening met Aspose PDF. Leer Aspose PDF-conversie en controleer + de digitale PDF-handtekening in C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: nl +og_description: Converteer PDF naar HTML terwijl vectoren behouden blijven en verifieer + de PDF-handtekening met Aspose PDF. Stapsgewijze C#-code, tips en afhandeling van + randgevallen. +og_title: PDF converteren naar HTML & PDF‑handtekening verifiëren – Complete Aspose + .NET‑handleiding +tags: +- Aspose.PDF +- C# +- PDF processing +title: PDF converteren naar HTML en PDF-handtekening verifiëren – Volledige Aspose + .NET-gids +url: /nl/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF naar HTML converteren en PDF-handtekening verifiëren – Complete Aspose .NET Tutorial + +Heb je ooit **PDF naar HTML moeten converteren** maar was je bang dat je vectorkwaliteit verliest of digitale handtekeningen breekt? Je bent niet de enige. Veel ontwikkelaars lopen tegen een muur aan wanneer een PDF alleen vectorafbeeldingen bevat of een SHA‑3‑gebaseerde digitale handtekening—standaardconversies rasteren alles of negeren de handtekening volledig. + +In deze gids lopen we een praktische oplossing door met behulp van **Aspose.Pdf** voor .NET: eerst verwijderen we rasterafbeeldingen terwijl we een PDF die alleen uit vectoren bestaat omzetten naar schone HTML, daarna laten we zien hoe je **PDF-handtekening kunt verifiëren** (ja, de SHA‑3‑256) en het resultaat in de console weergeeft. Aan het einde heb je een kant-en-klare C#-programma dat beide taken uitvoert, plus een aantal tips om veelvoorkomende valkuilen te vermijden. + +## Wat je nodig hebt + +- **Aspose.Pdf for .NET** (de nieuwste versie vanaf 2026‑04, bijv. 23.12). +- Een .NET-ontwikkelomgeving (Visual Studio 2022 of VS Code met de C#-extensie). +- Twee voorbeeld‑PDF’s: + 1. `vectorOnly.pdf` – bevat alleen vectoren en tekst, geen rasterafbeeldingen. + 2. `signed_sha3.pdf` – digitaal ondertekend met een SHA‑3‑256‑hash. + +Geen extra NuGet‑pakketten naast `Aspose.Pdf` zijn vereist. + +--- + +## Stap 1: Het project opzetten en de PDF’s laden + +Maak een nieuwe console‑app, voeg de Aspose.Pdf‑NuGet toe en importeer de namespaces. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Waarom dit belangrijk is*: Het vooraf laden van de documenten stelt ons in staat de objecten te hergebruiken voor zowel conversie als handtekeningverificatie, waardoor het geheugenverbruik laag blijft. + +--- + +## Stap 2: PDF naar HTML converteren terwijl rasterafbeeldingen worden overgeslagen + +De `HtmlSaveOptions` van Aspose.Pdf geeft je fijne controle over hoe afbeeldingen worden behandeld. Het instellen van `RasterImagesSavingMode` op `Skip` vertelt de bibliotheek om rasterafbeeldingen volledig te negeren—perfect voor een bron die alleen uit vectoren bestaat. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Verwachte output**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Pro tip*: Als je later de HTML in een webpagina moet insluiten, bevat het gegenereerde bestand alleen SVG en CSS—geen omvangrijke PNG/JPEG‑blobs. + +--- + +## Stap 3: De handtekeninghandler voorbereiden + +De `PdfFileSignature`‑klasse van Aspose.Pdf is het toegangspunt voor elk werk met digitale handtekeningen. Het leest het handtekening‑woordenboek, haalt de naam op en stelt je in staat te verifiëren met een specifiek hash‑algoritme. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Waarom deze stap cruciaal is*: Zonder de handler kun je geen handtekeningen opsommen of het benodigde hash‑algoritme kiezen (bijv. SHA‑3‑256). + +--- + +## Stap 4: Elke handtekening opsommen en verifiëren met SHA‑3‑256 + +De methode `GetSignNames()` retourneert elke handtekening‑label in de PDF. Loop erdoor, roep `VerifySignature` aan met `DigestHashAlgorithm.Sha3_256`, en druk het resultaat af. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Voorbeeld console‑output**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Randgeval*: Als een handtekening een andere hash gebruikt (bijv. SHA‑256) zal de verificatie `False` retourneren. Je kunt een fallback‑controle toevoegen door andere `DigestHashAlgorithm`‑waarden te proberen binnen de lus. + +--- + +## Stap 5: Volledig werkend voorbeeld (alle code op één plek) + +Hieronder staat het volledige programma dat je kunt kopiëren‑plakken in `Program.cs`. Vervang `YOUR_DIRECTORY` door de daadwerkelijke map waar je PDF‑bestanden zich bevinden. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Voer het programma uit (`dotnet run` of druk op **F5** in Visual Studio). Je zou de conversiebevestiging moeten zien, gevolgd door de resultaten van de handtekeningverificatie. + +--- + +## Veelgestelde vragen & hoe ze op te lossen + +| Vraag | Antwoord | +|----------|--------| +| **Bevat de HTML nog steeds de originele lettertypen?** | Aspose.Pdf embeddeert de gebruikte lettertypen standaard als base‑64 data‑URI’s, zodat de output correct wordt weergegeven zelfs als de host‑machine die lettertypen niet heeft. | +| **Wat als mijn PDF zowel vectoren *als* afbeeldingen bevat?** | Behoud `RasterImagesSavingMode = Skip` om afbeeldingen te verwijderen, of schakel over naar `EmbedAll` als je ze nodig hebt. De optie geldt per conversie, dus je kunt twee passes uitvoeren als je beide versies nodig hebt. | +| **Mijn handtekening gebruikt SHA‑512—hoe verifieer ik die?** | Vervang `DigestHashAlgorithm.Sha3_256` door `DigestHashAlgorithm.Sha512`. Je kunt zelfs het algoritme uit het handtekening‑woordenboek detecteren en dynamisch kiezen. | +| **Is er een manier om de certificaatdetails van de ondertekenaar te krijgen?** | Ja. Na verificatie roep je `signatureHandler.GetSignatureInfo(signName).Certificate` aan om het X.509‑certificaat op te halen en velden zoals `Subject` en `Issuer` te inspecteren. | +| **Wat als de PDF met een wachtwoord is beveiligd?** | Laad het met `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. De rest van de workflow blijft hetzelfde. | + +--- + +## Pro‑tips voor productie‑klare code + +1. **PDF's correct vrijgeven** – Plaats `PdfDocument`‑instanties in een `using`‑blok of roep `Dispose()` aan om native resources vrij te maken. +2. **Batchverwerking** – Als je tientallen PDF's hebt, doorloop je een map, sla je resultaten op in een CSV, en paralleliseer je de conversie met `Parallel.ForEach`. +3. **Logging** – Vervang `Console.WriteLine` door een gestructureerde logger (Serilog, NLog) voor betere traceerbaarheid, vooral bij het verifiëren van veel handtekeningen. +4. **Foutafhandeling** – Vang `Aspose.Pdf.Exceptions` op om corrupte bestanden op een nette manier af te handelen: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Versie‑compatibiliteit** – Aspose.Pdf ontwikkelt zich snel. Test altijd met de exacte versie die in je `csproj` wordt vermeld. De getoonde API werkt voor 23.x en later. + +--- + +## Conclusie + +We hebben zojuist **PDF naar HTML geconverteerd** terwijl we alleen vectoren en tekst behouden, en we hebben de **PDF-handtekening geverifieerd** met het SHA‑3‑256‑algoritme—alles met een handvol regels C#. De belangrijkste conclusies zijn: + +- Gebruik `HtmlSaveOptions.RasterImagesSavingMode = Skip` voor schone HTML die alleen vectoren bevat. +- Maak gebruik van `PdfFileSignature` en `DigestHashAlgorithm.Sha3_256` om **pdf digitale handtekening** betrouwbaar te controleren. + +Vanaf hier kun je gerelateerde onderwerpen verkennen, zoals **aspose pdf conversie** van PDF's naar PNG, het extraheren van ingesloten bestanden, of het bouwen van een webservice die PDF's accepteert en geverifieerde HTML‑fragmenten teruggeeft. + +Probeer het, pas de opties aan, en laat ons weten wat je ontdekt. Veel programmeerplezier! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 0f4ee3473..1d356f4c8 100644 --- a/pdf/dutch/net/digital-signatures/_index.md +++ b/pdf/dutch/net/digital-signatures/_index.md @@ -26,6 +26,9 @@ Leer hoe u een PDF digitaal ondertekent met een aangepaste vormgeving met Aspose ### [Digitale handtekeninginformatie uit PDF's extraheren met Aspose.PDF](./extract-digital-signature-info-from-pdfs-aspose-pdf/) Een codetutorial voor Aspose.PDF Net +### [Hoe u handtekeningen uit PDF's extraheert – Aspose C# gids](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Leer hoe u handtekeningen uit PDF's extraheert met Aspose en C# in een duidelijke stap‑voor‑stap tutorial. + ### [Hoe u de PDF-handtekeningtaal kunt wijzigen met Aspose.PDF voor .NET](./change-pdf-signature-language-aspose-net/) Leer hoe u de tekst van digitale handtekeningen in PDF's kunt aanpassen met Aspose.PDF voor .NET. Perfect voor het voorbereiden en lokaliseren van meertalige documenten. @@ -44,7 +47,7 @@ Leer hoe u digitale handtekeningen efficiënt uit PDF's verwijdert met Aspose.PD ### [PDF-handtekeningen verifiëren met Aspose.PDF voor .NET: een uitgebreide handleiding](./verify-pdf-signatures-aspose-pdf-net/) Leer hoe u digitale handtekeningen in PDF-bestanden kunt verifiëren met Aspose.PDF voor .NET. Deze handleiding behandelt de installatie, implementatie en praktische toepassingen. -### [PDF-handtekening verifiëren in C# – een stapsgewijze handleiding](./verify-pdf-signature-in-c-step-by-step-guide/) +### [PDF-handtekening verifiëren in C# – een stap‑voor‑stap handleiding](./verify-pdf-signature-in-c-step-by-step-guide/) Leer hoe u PDF-handtekeningen kunt verifiëren met C# en Aspose.PDF voor .NET in een duidelijke stap‑voor‑stap tutorial. ### [Beheers PDF-ondertekening en -verificatie met Aspose.PDF .NET](./mastering-aspose-pdf-net-sign-verify-smart-card-certificates/) @@ -62,6 +65,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-handtekening verifiëren en Bates‑nummering toevoegen – Complete C#‑gids](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Leer hoe u PDF-handtekeningen valideert en Bates‑nummering toevoegt met Aspose.PDF voor .NET in een volledige C#‑stap‑voor‑stap gids. + ## Aanvullende bronnen - [Aspose.PDF voor Netdocumentatie](https://docs.aspose.com/pdf/net/) diff --git a/pdf/dutch/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/dutch/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..9a2b277e9 --- /dev/null +++ b/pdf/dutch/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-02 +description: Leer hoe u handtekeningen kunt extraheren, een veld kunt toevoegen, een + lege PDF-pagina kunt toevoegen, hoe u een widget kunt toevoegen en transparantie + in PDF kunt behouden met Aspose.Pdf in C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: nl +og_description: Hoe handtekeningen uit een PDF te extraheren en gerelateerde taken + uit te voeren, zoals het toevoegen van velden, lege pagina's, widgets en het behouden + van transparantie met Aspose.Pdf. +og_title: Hoe handtekeningen uit PDF te extraheren – Aspose C#‑gids +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Hoe handtekeningen uit PDF te extraheren – Aspose C#‑gids +url: /nl/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe handtekeningen uit PDF te extraheren – Aspose C# gids + +**Hoe handtekeningen uit een PDF te extraheren** is een veelvoorkomende eis wanneer je contractverwerking, factuurgoedkeuringen of een workflow die afhankelijk is van digitale handtekeningen automatiseert. +In deze gids lopen we ook door **hoe een veld toe te voegen**, **een lege pagina PDF toe te voegen**, **hoe een widget toe te voegen**, en **transparantie PDF te behouden** met behulp van de Aspose.Pdf‑bibliotheek voor .NET. + +Stel je voor dat je elke nacht tientallen ondertekende PDF‑bestanden ontvangt; elk bestand handmatig openen om handtekeningen te verifiëren zou een nachtmerrie zijn. Met een paar regels C#‑code kun je programmatically de namen van de handtekeningen ophalen, je originele grafische elementen intact houden, en zelfs het document verrijken met nieuwe formuliervelden—alles zonder bestaande transparantie of kleurprofielen te breken. + +> **Wat je krijgt:** een compleet, uitvoerbaar voorbeeld dat een PDF converteert naar PDF/X‑4 (met behoud van transparantie), elke ingebedde handtekeningnaam extraheert, een lege pagina toevoegt, en een tekstvak‑formulierveld maakt dat op twee plaatsen op dezelfde pagina verschijnt. + +## Voorvereisten + +- .NET 6.0 of hoger (de code werkt ook met .NET Framework) +- Aspose.Pdf for .NET **v25.2** of nieuwer (vereist voor `GetSignatureNames()`) +- Een Visual‑Studio‑project of een andere C#‑IDE +- Drie voorbeeld‑PDF’s in een map die je beheert: + - `source.pdf` – elke PDF die je wilt converteren met behoud van transparantie + - `signed.pdf` – een PDF die al digitale handtekeningen bevat + - (optioneel) een lege map voor de uitvoerbestanden + +> **Pro tip:** Als je nog geen gelicentieerde kopie hebt, kun je een gratis tijdelijke licentie aanvragen via de website van Aspose. De gratis modus werkt voor testen, maar voegt een watermerk toe. + +## Stap 1 – Transparantie PDF behouden door te converteren naar PDF/X‑4 + +Transparantie en ingebedde kleurprofielen gaan vaak verloren wanneer je een PDF flatten. Converteren naar **PDF/X‑4** behoudt die visuele elementen, wat cruciaal is voor print‑klare documenten. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Waarom dit belangrijk is:** +PDF/X‑4 is de ISO‑standaard voor grafische‑exchange PDF’s die live transparantie behouden. Door `PdfFormatConversionOptions` te gebruiken, vermijd je de veelvoorkomende valkuil van het rasteren van transparante objecten, wat de bestandsgrootte drastisch kan vergroten en de kwaliteit kan verminderen. + +## Stap 2 – Hoe handtekeningen uit een PDF te extraheren + +Aspose heeft `GetSignatureNames()` geïntroduceerd in versie 25.2, waardoor handtekening‑extractie één regel code wordt. De methode retourneert een array met de logische namen die aan elk digitaal handtekeningveld zijn toegewezen. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**Wat je kunt verwachten:** Als `signed.pdf` twee handtekeningen bevat met de namen *ManagerSig* en *ClientSig*, zal de console het volgende afdrukken: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Afhandeling van randgevallen:** +- Als de PDF geen handtekeningen bevat, retourneert `GetSignatureNames()` een lege array – er wordt geen uitzondering gegooid. +- Voor PDF’s met corrupte handtekeningvelden kun je de aanroep omhullen met een `try/catch` en de fout loggen zonder het hele proces te onderbreken. + +## Stap 3 – Lege pagina PDF toevoegen en een TextBox met meerdere Widgets maken + +Een nieuwe pagina toevoegen is eenvoudig, maar **hoe een veld toe te voegen** en **hoe een widget toe te voegen** tegelijk vereist wat nuance. Een *widget* is de visuele weergave van een formulierveld; je kunt meerdere widgets aan hetzelfde logische veld koppelen, waardoor dezelfde data op meerdere locaties verschijnt. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Waarom meerdere widgets gebruiken?** +Stel dat je dezelfde opmerking zowel op de voor- als achterkant van een contract wilt laten verschijnen. Door twee widgets aan hetzelfde veld te koppelen, wordt elke wijziging die de gebruiker op één locatie maakt automatisch in de andere bijgewerkt. + +**Veelvoorkomende valkuilen:** +- Als je het veld niet toevoegt aan `newDoc.Form`, wordt de widget onzichtbaar in PDF‑viewers. +- Het gebruiken van identieke rechthoek‑coördinaten voor beide widgets plaatst ze bovenop elkaar—zorg ervoor dat de `Rectangle`‑waarden verschillen. + +## Stap 4 – Alles samenvoegen: Een volledig, uitvoerbaar voorbeeld + +Hieronder staat een enkel programma dat elke stap in de gepresenteerde volgorde uitvoert. Kopieer‑plak het in een nieuw console‑project, pas de paden aan, en voer het uit. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Verwachte output + +Wanneer je het programma uitvoert, zie je ongeveer het volgende: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Open `TextBoxMultipleWidgets.pdf` in Adobe Acrobat Reader; je zult twee identieke tekstvakken zien met het label **Comments**—één dicht bij de bovenkant, één iets lager. Typen in één vak werkt het andere direct bij. + +## Veelgestelde vragen (FAQ) + +| Vraag | Antwoord | +|-------|----------| +| **Kan ik de daadwerkelijke handtekening‑bytes extraheren?** | `GetSignatureNames()` retourneert alleen logische namen. Om het certificaat of de handtekeningwaarde op te halen, heb je `SignatureField`‑objecten nodig (`document.Form["fieldName"] as SignatureField`). | +| **Werkt PDF/X‑4 conversie op versleutelde PDF’s?** | Ja, zolang je het wachtwoord opgeeft via `Document.Open(file, password)`. | +| **Wat als ik meer dan twee widgets nodig heb?** | Roep gewoon `textBox.Widgets.Add()` aan voor elke extra `WidgetAnnotation`. | +| **Erft de lege pagina de paginagrootte van de originele PDF?** | De nieuwe pagina gebruikt de standaardgrootte (A4). Je kunt een `Page`‑object met aangepaste afmetingen doorgeven indien nodig. | +| **Is de code compatibel met .NET Core?** | Absoluut—Aspose.Pdf is cross‑platform. Voeg gewoon het NuGet‑pakket toe aan je .NET Core‑project. | + +## Conclusie + +In deze tutorial hebben we **hoe handtekeningen uit PDF‑bestanden te extraheren** gedemonstreerd, terwijl we ook **hoe een veld toe te voegen**, **een lege pagina PDF toe te voegen**, **hoe een widget toe te voegen**, en **transparantie PDF te behouden** hebben behandeld met Aspose.Pdf voor C#. Je beschikt nu over een solide, end‑to‑end oplossing die je in elke document‑verwerkingspipeline kunt integreren. + +Klaar voor de volgende uitdaging? Probeer deze technieken te combineren met Aspose’s OCR‑module om tekst uit gescande documenten te lezen. + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/dutch/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..6870c2149 --- /dev/null +++ b/pdf/dutch/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,223 @@ +--- +category: general +date: 2026-04-02 +description: Verifieer PDF-handtekening snel en leer hoe je batesnummering toevoegt + met Aspose.Pdf. Inclusief stapsgewijze code en tips. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: nl +og_description: Verifieer PDF-handtekening snel en leer hoe je batesnummering toevoegt + met Aspose.Pdf. Volg het volledige voorbeeld en vermijd veelvoorkomende valkuilen. +og_title: PDF-handtekening verifiëren en Bates-nummers toevoegen – Complete C#-gids +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: PDF-handtekening verifiëren en Bates-nummering toevoegen – Complete C#-gids +url: /nl/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF-handtekening verifiëren en Bates-nummering toevoegen – Complete C# gids + +Heb je ooit **PDF-handtekening moeten verifiëren** voordat je een contract verzendt, maar wist je niet welke API‑aanroep je moest gebruiken? Je bent niet de enige—veel ontwikkelaars lopen tegen dit obstakel aan bij het verwerken van juridisch bindende PDF‑bestanden. In deze tutorial lopen we stap voor stap door **PDF-handtekening verifiëren** met Aspose.Pdf en laten we je vervolgens zien **hoe je Bates‑nummering kunt toevoegen** zodat je bestanden audit‑klaar blijven. + +We behandelen ook **hoe je handtekening programmatically kunt verifiëren**, laten zien **hoe je Bates in één keer kunt toevoegen**, en leggen de resultaten van **check pdf signature** uit zodat je het resultaat kunt vertrouwen. Aan het einde heb je een werkende C# console‑app die beide taken uitvoert—geen mysterie, gewoon duidelijke code. + +--- + +## Wat je nodig hebt + +- **.NET 6.0** of later (het voorbeeld werkt ook met .NET Framework 4.7+) +- **Aspose.Pdf for .NET** NuGet‑package (versie 23.11 of nieuwer) +- Een ondertekende PDF‑file (`signed.pdf`) die je wilt valideren +- Een gewone PDF (`input.pdf`) die de Bates‑nummers krijgt + +Als je deze hebt, kun je van start. Geen extra SDK’s, geen verborgen configuratie‑bestanden. + +--- + +## Stap 1: Het project opzetten + +Begin met het aanmaken van een console‑project: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Open `Program.cs` en verwijder de standaardcode. We bouwen alles vanaf nul zodat je later de uiteindelijke versie kunt copy‑pasten. + +--- + +## Stap 2: PDF-handtekening verifiëren + +### Waarom verificatie belangrijk is + +Een digitale handtekening kan **gecompromitteerd** zijn als het onderliggende certificaat is ingetrokken of het document is gemanipuleerd na ondertekening. Aspose.Pdf biedt een handige `IsSignatureCompromised`‑methode die een boolean teruggeeft—eenvoudig, maar krachtig genoeg voor de meeste audit‑pipelines. + +### Code‑fragment + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Uitleg** + +- `Document` laadt de PDF in het geheugen. +- `PdfFileSignature` omsluit het document en biedt handtekening‑gerelateerde methoden. +- `IsSignatureCompromised("Signature1")` controleert de integriteit van de handtekening met de naam *Signature1*. +- Het boolean‑resultaat vertelt je of de handtekening nog steeds betrouwbaar is. + +> **Pro tip:** Als je de naam van het handtekeningveld niet kent, roep dan eerst `pdfSignature.GetSignatureNames()` aan; dit geeft een lijst met alle handtekening‑identifiers. + +--- + +## Stap 3: Bates‑nummeringsopties voorbereiden + +### Wat is Bates‑nummering? + +Bates‑nummers zijn opeenvolgende identifiers die op elke pagina van een juridisch of forensisch document worden afgedrukt. Ze maken het verwijzen naar pagina’s tijdens discovery‑ of auditprocessen een fluitje van een cent. Aspose.Pdf’s `BatesNumberingOptions` laat je prefix, startnummer, aantal cijfers, uitlijning en marge aanpassen—alles in één object. + +### Vervolg van de code + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Uitleg** + +- `BatesNumberingOptions` centraliseert alle opmaakkeuzes. +- `AddBatesNumbering` doorloopt automatisch elke pagina—geen handmatige lus nodig. +- De `Prefix` (`INV-`) en `StartNumber` (1000) produceren labels zoals `INV-01000`, `INV-01001`, enz. +- Pas `BottomMargin` aan als je het nummer hoger of lager op de pagina wilt plaatsen. + +--- + +## Stap 4: Het volledige voorbeeld uitvoeren + +Sla het bestand op en voer vervolgens uit: + +```bash +dotnet run +``` + +Je zou twee console‑regels moeten zien: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Als de eerste regel `True` afdrukt, is de handtekening gecompromitteerd—wat betekent dat het document mogelijk is aangepast na ondertekening of dat het certificaat niet meer geldig is. In dat geval moet je verdere verwerking afbreken. + +--- + +## Stap 5: Veelvoorkomende randgevallen & hoe ze op te lossen + +| Situatie | Waar je op moet letten | Aanbevolen oplossing | +|-----------|-----------------------|----------------------| +| **Meerdere handtekeningen** | `IsSignatureCompromised` controleert slechts één veld tegelijk. | Loop door `pdfSignature.GetSignatureNames()` en verifieer elke handtekening. | +| **Aangepaste handtekeningveldnaam** | Het gebruik van `"Signature1"` kan een uitzondering veroorzaken als de naam anders is. | Haal eerst de lijst met namen op, of geef de exacte naam door die je in Acrobat ziet. | +| **Grote PDF’s (100+ pagina’s)** | Bates‑nummers toevoegen kan veel geheugen verbruiken. | Gebruik `Document.Save` met `SaveOptions` die streaming mogelijk maken (`PdfSaveOptions { Compress = true }`). | +| **Niet‑Latijnse tekens in prefix** | Sommige lettertypen ondersteunen Unicode niet standaard. | Stel `pdfWithBates.Font` in op een Unicode‑compatibel lettertype zoals `Arial Unicode MS`. | +| **Nummers links plaatsen** | Uitlijning is hard‑gecodeerd naar `Right`. | Verander `Alignment = HorizontalAlignment.Left` in `BatesNumberingOptions`. | + +--- + +## Stap 6: Het resultaat handmatig verifiëren (optioneel) + +Open `BatesNumbered.pdf` in een PDF‑viewer: + +1. Blader door de pagina’s—elke pagina moet een label tonen zoals **INV‑01000** rechtsonder. +2. Gebruik het **Signature Panel** in Acrobat, dubbelklik op de handtekening en bevestig dat de status overeenkomt met de console‑output. + +Als alles klopt, heb je met succes **check pdf signature** status gecontroleerd en **add bates numbering** toegepast in één stap. + +--- + +## Veelgestelde vragen + +**V: Kan ik een handtekening verifiëren zonder het hele document te laden?** +A: Aspose.Pdf streamt het bestand onder de motorkap, maar je hebt nog steeds een `Document`‑instantie nodig. Voor zeer grote bestanden kun je overwegen `PdfFileSignature` direct met een bestands‑stream te gebruiken om het geheugenverbruik te verminderen. + +**V: Heb ik een licentie nodig voor Aspose.Pdf?** +A: Een gratis evaluatie werkt, maar voegt een watermerk toe. Voor productie heb je een geldige licentie nodig; anders krijgen de gegenereerde PDF’s het Aspose‑banner. + +**V: Wat als ik Bates‑nummers alleen op een subset van pagina’s wil toepassen?** +A: Gebruik `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` waarbij de array de paginanummers bevat die je wilt nummeren. + +--- + +## Conclusie + +Je weet nu **hoe je PDF-handtekening kunt verifiëren** met Aspose.Pdf, begrijpt de betekenis van het boolean‑resultaat, en kunt zelfverzekerd **Bates‑nummering toevoegen** aan elk PDF‑bestand dat je beheert. Het volledige, uitvoerbare voorbeeld combineert beide taken, waardoor je één console‑tool hebt die de authenticiteit van een document controleert en het van audit‑klare identifiers voorziet. + +Vervolgens kun je **hoe je handtekening verifiëren** tegen een vertrouwde root‑store onderzoeken, of experimenteren met aangepaste **add bates numbering**‑stijlen zoals diagonale stempels of per‑sectie prefixes. Beide onderwerpen bouwen voort op de basis die je nu beheerst, en ze maken je document‑verwerkings‑pipeline nog robuuster. + +Veel programmeerplezier, en onthoud—handtekeningen controleren en pagina’s nummeren is een eitje zodra je de juiste code hebt! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/dutch/net/printing-rendering/_index.md index c60d08ed1..f845104ee 100644 --- a/pdf/dutch/net/printing-rendering/_index.md +++ b/pdf/dutch/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Leer hoe u efficiënt specifieke pagina's van een PDF kunt afdrukken met Aspose. ### [Aangepaste zoomfactor instellen in PDF's met Aspose.PDF voor .NET - Een complete handleiding](./aspose-pdf-net-set-zoom-factor-pdfs/) Leer hoe u een aangepaste zoomfactor in PDF-documenten instelt met Aspose.PDF voor .NET. Deze handleiding behandelt de installatie, implementatiestappen en praktische toepassingen. +### [PDF renderen in C# – Complete gids voor PNG, HTML en stempelen](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Leer hoe u PDF's rendert naar PNG, HTML en stempelt met Aspose.PDF voor .NET in C#. + ## Aanvullende bronnen - [Aspose.PDF voor Netdocumentatie](https://docs.aspose.com/pdf/net/) diff --git a/pdf/dutch/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/dutch/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..5c47c32f6 --- /dev/null +++ b/pdf/dutch/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-04-02 +description: Hoe PDF te renderen met Aspose.PDF in C#. Leer PDF te renderen naar PNG, + PDF op te slaan als HTML en efficiënt automatisch passende tekststempels toe te + voegen. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: nl +og_description: Hoe PDF te renderen met Aspose.PDF in C#. Deze gids toont het renderen + van PDF naar PNG, opslaan als HTML en het maken van automatisch passende tekststempels. +og_title: Hoe PDF te renderen in C# – PNG, HTML & Auto‑Fit Stempels +tags: +- Aspose.PDF +- C# +- PDF processing +title: Hoe PDF te renderen in C# – Complete gids voor PNG, HTML en stempelen +url: /nl/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe PDF te Renderen in C# – Complete Gids voor PNG, HTML & Stempeling + +Heb je je ooit afgevraagd **hoe je PDF** kunt renderen in een .NET‑applicatie zonder een enkel glyf te verliezen? Misschien heb je een snelle `PdfRenderer` geprobeerd en zag je ontbrekende tekens, of je hebt een scherpe PNG nodig voor een thumbnail maar de output ziet er gekarteld uit. Naar mijn ervaring maakt de juiste combinatie van render‑opties en font‑afhandeling het verschil tussen een kapotte preview en een pixel‑perfecte afbeelding. + +In deze tutorial lopen we drie real‑world scenario’s door met Aspose.PDF for .NET: een PDF‑pagina renderen naar PNG terwijl we fonts analyseren, een `TextStamp` toevoegen die automatisch zijn lettertypegrootte aanpast, en een PDF opslaan als HTML met behulp van de CMap‑tabel van het font. Aan het einde kun je **PDF naar PNG renderen**, **PDF‑pagina PNG converteren**, **PDF‑pagina‑afbeelding exporteren**, en zelfs **PDF opslaan als HTML** zonder problemen. + +## Vereisten + +- .NET 6.0 of hoger (de code werkt ook op .NET Framework 4.6+) +- Aspose.PDF for .NET NuGet‑pakket (`Install-Package Aspose.PDF`) +- Een PDF‑bestand met complexe fonts (bijv. `complexFonts.pdf`) voor de render‑demo +- Basiskennis van C# en Visual Studio (of een andere IDE naar keuze) + +> **Pro tip:** Als je op een CI‑server werkt, zorg er dan voor dat het Aspose‑licentiebestand ofwel is ingebed als resource of wordt gerefereerd via een omgevingsvariabele om evaluatiewatermerken te vermijden. + +--- + +## ## Hoe PDF naar PNG Renderen met Font‑Analyse + +### Waarom fonts analyseren? + +Wanneer een PDF aangepaste of ingebedde fonts bevat, kan een naïeve render glyphs weglaten die de renderer niet kan mappen. Het inschakelen van `AnalyzeFonts` dwingt Aspose om de font‑streams te inspecteren en ontbrekende glyphs te substitueren, waardoor een getrouwe afbeelding ontstaat. + +### Stapsgewijze implementatie + +1. **Maak een `PngDevice` aan met `AnalyzeFonts` ingeschakeld.** +2. **Laad de bron‑PDF** met `Document`. +3. **Verwerk de gewenste pagina** en schrijf de PNG naar schijf. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**Wat je zou moeten zien:** Een bestand genaamd `rendered.png` in `YOUR_DIRECTORY` dat er identiek uitziet als de eerste pagina van `complexFonts.pdf`, inclusief alle speciale tekens en diakritische tekens. + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### Veelvoorkomende valkuilen & hoe ze te vermijden + +- **Ontbrekende fonts op de server:** Als de PDF fonts refereert die niet zijn ingebed, plaats die fonts dan in het zoekpad van de applicatie of schakel `FontRepository` in om naar een aangepaste map te wijzen. +- **Grote PDF‑bestanden:** Het renderen van veel pagina’s in een lus kan veel geheugen verbruiken; maak elke `Document`‑instantie direct weer vrij of gebruik `using`‑blokken zoals getoond. + +--- + +## ## Een Auto‑Fit TextStamp Toevoegen (PDF Renderen met Dynamische Tekst) + +### Wanneer heb je een dynamisch formaat stempel nodig? + +Stel je voor dat je facturen genereert en een “PAID” watermerk wilt overleggen dat in elk rechthoekig gebied past, ongeacht de lengte van de tekst. Handmatig de lettergrootte berekenen is foutgevoelig; Aspose’s `AutoAdjustFontSizeToFitStampRectangle` doet het zware werk. + +### Stapsgewijze implementatie + +1. **Configureer een `TextStamp`** met auto‑adjust eigenschappen. +2. **Laad de doel‑PDF** die je wilt stempelen. +3. **Voeg de stempel toe aan een pagina** en sla het resultaat op. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Resultaat:** `stampAutoFit.pdf` bevat de tekst “Important notice” perfect passend in de 300 × 150 pt rechthoek, ongeacht de oorspronkelijke tekenreekslengte. + +#### Randgevallen om in gedachten te houden + +- **Zeer lange tekenreeksen:** Als de tekst de rechthoek overschrijdt zelfs bij de kleinste lettergrootte, zal Aspose afkappen volgens de `WordWrapMode`. Je kunt de lengte vooraf controleren of de rechthoek vergroten. +- **Meerdere stempels:** Het hergebruiken van dezelfde `TextStamp`‑instantie op verschillende pagina’s werkt, maar onthoud dat positie‑eigenschappen (`Left`, `Top`) hun laatste waarden behouden—reset ze indien nodig. + +--- + +## ## PDF Opslaan als HTML met de CMap‑Tabel van het Font + +### Waarom de CMap‑tabel gebruiken? + +Bij het converteren van een PDF naar HTML is het behouden van de Unicode‑mapping cruciaal voor doorzoekbare tekst. De CMap‑gebaseerde strategie dwingt Aspose om de interne character map van het font te prioriteren, wat vaak leidt tot nauwkeurigere teksterkenning dan een generieke codering. + +### Stapsgewijze implementatie + +1. **Maak `HtmlSaveOptions`** aan met de CMap‑gebaseerde coderingregel. +2. **Laad de bron‑PDF**. +3. **Sla op als HTML** met de geconfigureerde opties. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**Wat je krijgt:** Een map (als `SplitIntoPages` true is) met `cmapHtml.html` en bijbehorende resources. Open de HTML in een browser en je zult selecteerbare, doorzoekbare tekst zien die bijna perfect overeenkomt met de originele PDF. + +#### Tips voor een schone HTML‑export + +- **Afbeeldingen vs. vectoren:** Stel `RasterImagesSavingMode` in op `RasterImagesSavingMode.AsEmbeddedPartsOfPng` als je PNG’s boven JPEG’s verkiest voor scherpere graphics. +- **Grote PDF‑bestanden:** Gebruik `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` om elke pagina lichtgewicht te houden. + +--- + +## ## Volledig Werkend Voorbeeld – Alle Drie Scenario’s in Eén Project + +Hieronder vind je een zelfstandige console‑app die de drie technieken naast elkaar demonstreert. Kopieer‑plak de code in een nieuw C# console‑project, voeg het Aspose.PDF NuGet‑pakket toe, en pas de bestands‑paden aan. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Voer het programma uit, en je zult vinden: + +- `rendered.png` – een perfecte afbeelding van de eerste PDF‑pagina. +- `stampAutoFit.pdf` – de originele PDF met een dynamisch formaat “Important notice” stempel. +- `cmapHtml.html` (plus paginagebonden HTML‑bestanden) – een HTML‑versie die de originele tekencodering behoudt. + +--- + +## ## Veelgestelde Vragen (FAQ) + +**V: Verhoogt `AnalyzeFonts` de render‑tijd?** +A: Een beetje, omdat Aspose elke font‑stream scant. De afweging is meestal de moeite waard voor complexe PDF‑bestanden waarbij ontbrekende glyphs onaanvaardbaar zijn. + +**V: Kan ik meerdere pagina’s in een lus renderen?** +A: Zeker. Loop gewoon over `sourcePdf.Pages` en roep `pngDevice.Process(page, $"page{page.Number}.png")` aan. Vergeet niet elke `Document` vrij te geven als je ze afzonderlijk opent. + +**V: Wat als + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 6512642a3..29fd4f61a 100644 --- a/pdf/english/net/conversion-export/_index.md +++ b/pdf/english/net/conversion-export/_index.md @@ -80,6 +80,9 @@ 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. +### [Convert PDF to HTML and Verify PDF Signature – Full Aspose .NET Guide](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Learn how to convert PDFs to HTML and verify digital signatures using Aspose.PDF for .NET with detailed code examples. + ### [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. @@ -241,4 +244,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/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/english/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..1905eea8c --- /dev/null +++ b/pdf/english/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,258 @@ +--- +category: general +date: 2026-04-02 +description: Convert PDF to HTML while keeping vectors, then verify PDF signature + using Aspose PDF. Learn aspose pdf conversion and check pdf digital signature in + C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: en +og_description: Convert PDF to HTML while preserving vectors and verify PDF signature + with Aspose PDF. Step‑by‑step C# code, tips, and edge‑case handling. +og_title: Convert PDF to HTML & Verify PDF Signature – Complete Aspose .NET Tutorial +tags: +- Aspose.PDF +- C# +- PDF processing +title: Convert PDF to HTML and Verify PDF Signature – Full Aspose .NET Guide +url: /net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Convert PDF to HTML and Verify PDF Signature – Complete Aspose .NET Tutorial + +Ever needed to **convert PDF to HTML** but were worried about losing vector quality or breaking digital signatures? You're not the only one. Many developers hit a wall when a PDF contains only vector graphics or a SHA‑3 based digital signature—standard converters either rasterize everything or ignore the signature entirely. + +In this guide we’ll walk through a practical solution using **Aspose.Pdf** for .NET: first we’ll strip out raster images while turning a vector‑only PDF into clean HTML, then we’ll show you how to **verify PDF signature** (yes, the SHA‑3‑256 one) and surface the result in the console. By the end you’ll have a ready‑to‑run C# program that does both tasks, plus a handful of tips to avoid common pitfalls. + +## What You’ll Need + +- **Aspose.Pdf for .NET** (the latest version as of 2026‑04, e.g., 23.12). +- A .NET development environment (Visual Studio 2022 or VS Code with the C# extension). +- Two sample PDFs: + 1. `vectorOnly.pdf` – contains only vectors and text, no raster images. + 2. `signed_sha3.pdf` – digitally signed with a SHA‑3‑256 hash. + +No extra NuGet packages beyond `Aspose.Pdf` are required. + +--- + +## Step 1: Set Up the Project and Load the PDFs + +Create a new console app, add the Aspose.Pdf NuGet, and bring the namespaces into scope. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Why this matters*: Loading the documents up front lets us reuse the objects for both conversion and signature verification, keeping memory usage low. + +--- + +## Step 2: Convert PDF to HTML While Skipping Raster Images + +Aspose.Pdf’s `HtmlSaveOptions` gives you fine‑grained control over how images are handled. Setting `RasterImagesSavingMode` to `Skip` tells the library to ignore raster pictures entirely—perfect for a vector‑only source. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Expected output**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Pro tip*: If you later need to embed the HTML into a web page, the generated file contains only SVG and CSS—no bulky PNG/JPEG blobs. + +--- + +## Step 3: Prepare the Signature Handler + +Aspose.Pdf’s `PdfFileSignature` class is the entry point for any digital‑signature work. It reads the signature dictionary, extracts the name, and lets you verify using a specific hash algorithm. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Why this step is crucial*: Without the handler you cannot enumerate signatures or pick the hash algorithm you need (e.g., SHA‑3‑256). + +--- + +## Step 4: Enumerate and Verify Each Signature Using SHA‑3‑256 + +The `GetSignNames()` method returns every signature label in the PDF. Loop through them, call `VerifySignature` with `DigestHashAlgorithm.Sha3_256`, and print the result. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Sample console output**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Edge case*: If a signature uses a different hash (e.g., SHA‑256) the verification will return `False`. You can add a fallback check by trying other `DigestHashAlgorithm` values inside the loop. + +--- + +## Step 5: Full Working Example (All Code in One Place) + +Below is the complete program you can copy‑paste into `Program.cs`. Replace `YOUR_DIRECTORY` with the actual folder where your PDFs live. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Run the program (`dotnet run` or press **F5** in Visual Studio). You should see the conversion confirmation followed by the signature verification results. + +--- + +## Common Questions & How to Tackle Them + +| Question | Answer | +|----------|--------| +| **Will the HTML still contain the original fonts?** | Aspose.Pdf embeds the used fonts as base‑64 data URIs by default, so the output renders correctly even if the host machine lacks those fonts. | +| **What if my PDF has both vectors *and* images?** | Keep `RasterImagesSavingMode = Skip` to drop images, or switch to `EmbedAll` if you need them. The option is per‑conversion, so you can run two passes if you need both versions. | +| **My signature uses SHA‑512—how do I verify it?** | Replace `DigestHashAlgorithm.Sha3_256` with `DigestHashAlgorithm.Sha512`. You can even detect the algorithm from the signature dictionary and choose dynamically. | +| **Is there a way to get the signer’s certificate details?** | Yes. After verification, call `signatureHandler.GetSignatureInfo(signName).Certificate` to retrieve the X.509 certificate and inspect fields like `Subject` and `Issuer`. | +| **What if the PDF is password‑protected?** | Load it with `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. The rest of the workflow stays the same. | + +--- + +## Pro Tips for Production‑Ready Code + +1. **Dispose PDFs Properly** – Wrap `PdfDocument` instances in a `using` block or call `Dispose()` to free native resources. +2. **Batch Processing** – If you have dozens of PDFs, iterate over a directory, store results in a CSV, and parallelize the conversion with `Parallel.ForEach`. +3. **Logging** – Replace `Console.WriteLine` with a structured logger (Serilog, NLog) for better traceability, especially when verifying many signatures. +4. **Error Handling** – Catch `Aspose.Pdf.Exceptions` to handle corrupt files gracefully: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Version Compatibility** – Aspose.Pdf evolves quickly. Always test with the exact version referenced in your `csproj`. The API shown works for 23.x and later. + +--- + +## Conclusion + +We’ve just **converted PDF to HTML** while preserving only vectors and text, and we’ve **verified PDF signature** using the SHA‑3‑256 algorithm—all with a handful of lines of C#. The primary takeaways are: + +- Use `HtmlSaveOptions.RasterImagesSavingMode = Skip` for clean vector‑only HTML. +- Leverage `PdfFileSignature` and `DigestHashAlgorithm.Sha3_256` to **check pdf digital signature** reliably. + +From here you can explore related topics such as **aspose pdf conversion** of PDFs to PNG, extracting embedded files, or building a web service that accepts PDFs and returns verified HTML snippets. + +Give it a try, tweak the options, and let us know what you discover. Happy coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/digital-signatures/_index.md b/pdf/english/net/digital-signatures/_index.md index 76758a05a..c9dd6ec69 100644 --- a/pdf/english/net/digital-signatures/_index.md +++ b/pdf/english/net/digital-signatures/_index.md @@ -35,6 +35,9 @@ Learn how to securely create, sign, and verify PDF signatures with Aspose.PDF fo ### [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑by‑Step Guide](./extract-pdf-signature-info-aspose-pdf-net/) Learn how to extract digital signature information from PDFs using Aspose.PDF for .NET. This step-by-step guide covers installation, implementation, and practical applications. +### [How to Extract Signatures from PDF – Aspose C# Guide](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Learn how to extract signatures from PDF files using Aspose.PDF for .NET with C#. This step‑by‑step guide covers implementation and code examples. + ### [How to Implement Digital Signatures in .NET with Aspose.PDF: A Comprehensive Guide](./implement-pdf-signatures-dotnet-aspose-pdf-guide/) Learn how to implement secure digital signatures on PDFs using Aspose.PDF for .NET, including suppressing optional fields. @@ -59,6 +62,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. +### [Verify PDF Signature and Add Bates Numbering – Complete C# Guide](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Learn how to verify a PDF signature and add Bates numbering using Aspose.PDF for .NET in C# with step‑by‑step code examples. + ## Additional Resources - [Aspose.PDF for Net Documentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/english/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/english/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..a4a10b81d --- /dev/null +++ b/pdf/english/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,249 @@ +--- +category: general +date: 2026-04-02 +description: Learn how to extract signatures, add field, add blank page PDF, how to + add widget, and preserve transparency PDF using Aspose.Pdf in C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: en +og_description: How to extract signatures from a PDF and perform related tasks like + adding fields, blank pages, widgets, and preserving transparency using Aspose.Pdf. +og_title: How to Extract Signatures from PDF – Aspose C# Guide +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: How to Extract Signatures from PDF – Aspose C# Guide +url: /net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to Extract Signatures from PDF – Aspose C# Guide + +**How to extract signatures from a PDF** is a common requirement when you’re automating contract processing, invoice approvals, or any workflow that relies on digital signatures. +In this guide we’ll also walk through **how to add field**, **add blank page PDF**, **how to add widget**, and **preserve transparency PDF** using the Aspose.Pdf library for .NET. + +Imagine you receive dozens of signed PDFs each night; manually opening each file to verify signatures would be a nightmare. With a few lines of C# code you can programmatically pull the signature names, keep your original graphics intact, and even enrich the document with new form fields—all without breaking existing transparency or color profiles. + +> **What you’ll get:** a complete, runnable example that converts a PDF to PDF/X‑4 (preserving transparency), extracts every embedded signature name, adds a blank page, and creates a textbox form field that appears in two places on the same page. + +## Prerequisites + +- .NET 6.0 or later (the code works with .NET Framework as well) +- Aspose.Pdf for .NET **v25.2** or newer (required for `GetSignatureNames()`) +- A Visual Studio project or any C# IDE +- Three sample PDFs in a folder you control: + - `source.pdf` – any PDF you want to convert while keeping transparency + - `signed.pdf` – a PDF that already contains digital signatures + - (optional) an empty folder for the output files + +> **Pro tip:** If you don’t have a licensed copy yet, you can request a free temporary license from Aspose’s website. The free mode works for testing but adds a watermark. + +## Step 1 – Preserve Transparency PDF by Converting to PDF/X‑4 + +Transparency and embedded color profiles often get lost when you flatten a PDF. Converting to **PDF/X‑4** keeps those visual elements intact, which is crucial for print‑ready documents. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Why this matters:** +PDF/X‑4 is the ISO standard for graphic‑exchange PDFs that retain live transparency. By using `PdfFormatConversionOptions`, you avoid the common pitfall of rasterizing transparent objects, which can dramatically increase file size and degrade quality. + +## Step 2 – How to Extract Signatures from a PDF + +Aspose introduced `GetSignatureNames()` in version 25.2, making signature extraction a one‑liner. The method returns an array of the logical names assigned to each digital signature field. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**What to expect:** If `signed.pdf` contains two signatures named *ManagerSig* and *ClientSig*, the console will print: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Edge case handling:** +- If the PDF has no signatures, `GetSignatureNames()` returns an empty array – no exception is thrown. +- For PDFs with corrupted signature fields, you can wrap the call in a `try/catch` and log the error without aborting the whole process. + +## Step 3 – Add Blank Page PDF and Create a TextBox with Multiple Widgets + +Adding a new page is straightforward, but **how to add field** and **how to add widget** together requires a bit of nuance. A *widget* is the visual representation of a form field; you can attach several widgets to the same logical field, allowing the same data to appear in multiple locations. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Why use multiple widgets?** +Suppose you need the same comment to appear on both the front and back of a contract. By attaching two widgets to the same field, any change the user makes in one location automatically updates the other. + +**Common pitfalls:** +- Forgetting to add the field to `newDoc.Form` will make the widget invisible in PDF viewers. +- Using identical rectangle coordinates for both widgets will stack them on top of each other—make sure the `Rectangle` values differ. + +## Step 4 – Putting It All Together: A Full, Runnable Example + +Below is a single program that executes every step in the order presented. Copy‑paste it into a new console project, adjust the paths, and run. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Expected Output + +When you run the program you should see something like: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Open `TextBoxMultipleWidgets.pdf` in Adobe Acrobat Reader; you’ll notice two identical text boxes labeled **Comments**—one near the top, one a bit lower. Typing into one updates the other instantly. + +## Frequently Asked Questions (FAQ) + +| Question | Answer | +|----------|--------| +| **Can I extract the actual signature bytes?** | `GetSignatureNames()` only returns logical names. To pull the certificate or signature value you need `SignatureField` objects (`document.Form["fieldName"] as SignatureField`). | +| **Does PDF/X‑4 conversion work on encrypted PDFs?** | Yes, as long as you supply the password via `Document.Open(file, password)`. | +| **What if I need more than two widgets?** | Just call `textBox.Widgets.Add()` for each additional `WidgetAnnotation`. | +| **Will the blank page inherit page size from the original PDF?** | The new page uses the default size (A4). You can pass a `Page` object with custom dimensions if needed. | +| **Is the code compatible with .NET Core?** | Absolutely—Aspose.Pdf is cross‑platform. Just reference the NuGet package in your .NET Core project. | + +## Conclusion + +In this tutorial we demonstrated **how to extract signatures from PDF** files, while also covering **how to add field**, **add blank page PDF**, **how to add widget**, and **preserve transparency PDF** using Aspose.Pdf for C#. You now have a solid, end‑to‑end solution that you can drop into any document‑processing pipeline. + +Ready for the next challenge? Try combining these techniques with Aspose’s OCR module to read text from scanned + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/english/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..cb9c23beb --- /dev/null +++ b/pdf/english/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,223 @@ +--- +category: general +date: 2026-04-02 +description: Verify PDF signature quickly and learn how to add bates numbering using + Aspose.Pdf. Includes step‑by‑step code and tips. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: en +og_description: Verify PDF signature quickly and learn how to add bates numbering + using Aspose.Pdf. Follow the full example and avoid common pitfalls. +og_title: Verify PDF Signature and Add Bates Numbering – Complete C# Guide +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: Verify PDF Signature and Add Bates Numbering – Complete C# Guide +url: /net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Verify PDF Signature and Add Bates Numbering – Complete C# Guide + +Ever needed to **verify PDF signature** before you ship a contract, but weren’t sure which API call to use? You’re not alone—many devs hit that wall when handling legally‑binding PDFs. In this tutorial we’ll walk through exactly how to **verify PDF signature** with Aspose.Pdf and then show you **how to add bates numbering** so your files stay audit‑ready. + +We'll also touch on **how to verify signature** programmatically, cover **how to add bates** in a single pass, and explain **check pdf signature** results so you can trust the output. By the end you’ll have a runnable C# console app that does both tasks—no mystery, just clear code. + +--- + +## What You’ll Need + +- **.NET 6.0** or later (the example works with .NET Framework 4.7+ as well) +- **Aspose.Pdf for .NET** NuGet package (version 23.11 or newer) +- A signed PDF file (`signed.pdf`) you want to validate +- A plain PDF (`input.pdf`) that will receive Bates numbers + +If you’ve got those, you’re good to go. No extra SDKs, no hidden config files. + +--- + +## Step 1: Set Up the Project + +Start by creating a console project: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Open `Program.cs` and clear the default code. We’ll build everything from scratch so you can copy‑paste the final version later. + +--- + +## Step 2: Verify PDF Signature + +### Why verification matters + +A digital signature can be **compromised** if the underlying certificate is revoked or the document was tampered with after signing. Aspose.Pdf gives us a handy `IsSignatureCompromised` method that returns a boolean—simple, yet powerful enough for most audit pipelines. + +### Code snippet + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Explanation** + +- `Document` loads the PDF into memory. +- `PdfFileSignature` wraps the document and exposes signature‑related methods. +- `IsSignatureCompromised("Signature1")` checks the integrity of the signature named *Signature1*. +- The boolean result tells you whether the signature is still trustworthy. + +> **Pro tip:** If you’re not sure about the signature field name, call `pdfSignature.GetSignatureNames()` first; it returns a list of all signature identifiers. + +--- + +## Step 3: Prepare Bates Numbering Options + +### What is Bates numbering? + +Bates numbers are sequential identifiers printed on each page of a legal or forensic document. They make referencing pages a breeze during discovery or audit processes. Aspose.Pdf’s `BatesNumberingOptions` lets you customize prefix, start number, digit count, alignment, and margin—all in one object. + +### Code continuation + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Explanation** + +- `BatesNumberingOptions` centralizes all formatting choices. +- `AddBatesNumbering` iterates over each page automatically—no need for a manual loop. +- The `Prefix` (`INV-`) and `StartNumber` (1000) produce labels like `INV-01000`, `INV-01001`, etc. +- Adjust `BottomMargin` if you need the number higher or lower on the page. + +--- + +## Step 4: Run the Complete Example + +Save the file, then execute: + +```bash +dotnet run +``` + +You should see two console lines: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +If the first line prints `True`, the signature is compromised—meaning the document may have been altered after signing or the certificate is no longer valid. In that case, abort any downstream processing. + +--- + +## Step 5: Common Edge Cases & How to Handle Them + +| Situation | What to Watch For | Suggested Fix | +|-----------|-------------------|---------------| +| **Multiple signatures** | `IsSignatureCompromised` only checks one field at a time. | Loop through `pdfSignature.GetSignatureNames()` and verify each. | +| **Custom signature field name** | Using `"Signature1"` may throw an exception if the name differs. | Retrieve the list of names first, or pass the exact name you see in Acrobat. | +| **Large PDFs (100+ pages)** | Adding Bates numbers can be memory‑intensive. | Use `Document.Save` with `SaveOptions` that enable streaming (`PdfSaveOptions { Compress = true }`). | +| **Non‑Latin characters in prefix** | Some fonts don’t support Unicode by default. | Set `pdfWithBates.Font` to a Unicode‑compatible font like `Arial Unicode MS`. | +| **Need to place numbers on the left** | Alignment is hard‑coded to `Right`. | Change `Alignment = HorizontalAlignment.Left` in `BatesNumberingOptions`. | + +--- + +## Step 6: Verify the Result Manually (Optional) + +Open `BatesNumbered.pdf` in any PDF viewer: + +1. Flip through the pages—each should display a label like **INV‑01000** at the bottom‑right corner. +2. Use Acrobat’s **Signature Panel** to double‑click the signature and confirm the status matches the console output. + +If everything lines up, you’ve successfully **check pdf signature** status and applied **add bates numbering** in one go. + +--- + +## Frequently Asked Questions + +**Q: Can I verify a signature without loading the whole document?** +A: Aspose.Pdf streams the file under the hood, but you still need a `Document` instance. For massive files, consider using `PdfFileSignature` directly with a file stream to reduce memory footprint. + +**Q: Do I need a license for Aspose.Pdf?** +A: A free evaluation works, but it adds a watermark. For production you’ll want a proper license; otherwise the output PDFs will carry the Aspose banner. + +**Q: What if I need to add Bates numbers only to a subset of pages?** +A: Use `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` where the array lists the page numbers you want to number. + +--- + +## Conclusion + +You now know **how to verify PDF signature** with Aspose.Pdf, understand the meaning behind the boolean result, and can confidently **add bates numbering** to any PDF you control. The full, runnable example combines both tasks, giving you a single console tool that checks a document’s authenticity and stamps it with audit‑ready identifiers. + +Next, you might explore **how to verify signature** against a trusted root store, or experiment with custom **add bates numbering** styles such as diagonal stamps or per‑section prefixes. Both topics build on the foundation you’ve just mastered, and they’ll make your document‑processing pipeline even more robust. + +Happy coding, and remember—checking signatures and numbering pages is a piece of cake once you have the right code in place! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/english/net/printing-rendering/_index.md index edb588f82..a8d2c0b18 100644 --- a/pdf/english/net/printing-rendering/_index.md +++ b/pdf/english/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Learn how to efficiently print specific pages of a PDF using Aspose.PDF for .NET ### [Set Custom Zoom Factor in PDFs Using Aspose.PDF for .NET - A Complete Guide](./aspose-pdf-net-set-zoom-factor-pdfs/) Learn how to set a custom zoom factor in PDF documents using Aspose.PDF for .NET. This guide covers installation, implementation steps, and practical applications. +### [How to Render PDF in C# – Complete Guide to PNG, HTML & Stamping](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Learn to render PDFs to PNG and HTML, and apply stamping using Aspose.PDF for .NET in C# with step-by-step examples. + ## Additional Resources - [Aspose.PDF for Net Documentation](https://docs.aspose.com/pdf/net/) @@ -64,4 +67,4 @@ Learn how to set a custom zoom factor in PDF documents using Aspose.PDF for .NET {{< /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/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/english/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..169654d3e --- /dev/null +++ b/pdf/english/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-04-02 +description: How to render PDF using Aspose.PDF in C#. Learn to render PDF to PNG, + save PDF as HTML, and add auto‑fit text stamps efficiently. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: en +og_description: How to render PDF using Aspose.PDF in C#. This guide shows rendering + PDF to PNG, saving as HTML, and creating auto‑fit text stamps. +og_title: How to Render PDF in C# – PNG, HTML & Auto‑Fit Stamps +tags: +- Aspose.PDF +- C# +- PDF processing +title: How to Render PDF in C# – Complete Guide to PNG, HTML & Stamping +url: /net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to Render PDF in C# – Complete Guide to PNG, HTML & Stamping + +Ever wondered **how to render PDF** in a .NET application without losing a single glyph? Maybe you tried a quick `PdfRenderer` only to see missing characters, or you need a crisp PNG for a thumbnail but the output looks jagged. In my experience, the right combination of rendering options and font handling makes the difference between a broken preview and a pixel‑perfect image. + +In this tutorial we’ll walk through three real‑world scenarios with Aspose.PDF for .NET: rendering a PDF page to PNG while analyzing fonts, adding a `TextStamp` that automatically resizes its font, and saving a PDF as HTML using the font’s CMap table. By the end you’ll be able to **render PDF to PNG**, **convert PDF page PNG**, **export PDF page image**, and even **save PDF as HTML** without a hitch. + +## Prerequisites + +- .NET 6.0 or later (the code works on .NET Framework 4.6+ as well) +- Aspose.PDF for .NET NuGet package (`Install-Package Aspose.PDF`) +- A PDF file with complex fonts (e.g., `complexFonts.pdf`) for the rendering demo +- Basic familiarity with C# and Visual Studio (or any IDE you prefer) + +> **Pro tip:** If you’re on a CI server, make sure the Aspose license file is either embedded as a resource or referenced via environment variable to avoid evaluation watermarks. + +--- + +## ## How to Render PDF to PNG with Font Analysis + +### Why analyze fonts? + +When a PDF contains custom or embedded fonts, a naïve render can drop glyphs that the renderer can’t map. Enabling `AnalyzeFonts` forces Aspose to inspect the font streams and substitute missing glyphs, guaranteeing a faithful image. + +### Step‑by‑step implementation + +1. **Create a `PngDevice` with `AnalyzeFonts` turned on.** +2. **Load the source PDF** using `Document`. +3. **Process the desired page** and write the PNG to disk. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**What you should see:** A file named `rendered.png` in `YOUR_DIRECTORY` that looks identical to the first page of `complexFonts.pdf`, including all special characters and diacritics. + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### Common pitfalls & how to avoid them + +- **Missing fonts on the server:** If the PDF references fonts not embedded, place those fonts in the application’s probing path or enable `FontRepository` to point at a custom folder. +- **Large PDFs:** Rendering many pages in a loop can consume memory; dispose of each `Document` instance promptly or use `using` blocks as shown. + +--- + +## ## Adding an Auto‑Fit TextStamp (Render PDF with Dynamic Text) + +### When would you need a dynamically sized stamp? + +Imagine you generate invoices and need to overlay a “PAID” watermark that fits any rectangle you choose, regardless of the text length. Manually calculating font size is error‑prone; Aspose’s `AutoAdjustFontSizeToFitStampRectangle` does the heavy lifting. + +### Step‑by‑step implementation + +1. **Configure a `TextStamp`** with auto‑adjust properties. +2. **Load the target PDF** you want to stamp. +3. **Add the stamp to a page** and save the result. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Result:** `stampAutoFit.pdf` contains the text “Important notice” perfectly sized to the 300 × 150 pt rectangle, regardless of the original string length. + +#### Edge cases to consider + +- **Very long strings:** If the text exceeds the rectangle even at the smallest font size, Aspose will truncate according to the `WordWrapMode`. You can pre‑check length or increase rectangle size. +- **Multiple stamps:** Re‑using the same `TextStamp` instance on different pages works, but remember that position properties (`Left`, `Top`) retain their last values—reset them as needed. + +--- + +## ## Saving PDF as HTML Using the Font’s CMap Table + +### Why bother with the CMap table? + +When you convert a PDF to HTML, preserving Unicode mapping is crucial for searchable text. The CMap‑based strategy forces Aspose to prioritize the font’s internal character map, which often yields more accurate text extraction than a generic encoding. + +### Step‑by‑step implementation + +1. **Create `HtmlSaveOptions`** with the CMap‑based encoding rule. +2. **Load the source PDF**. +3. **Save as HTML** using the configured options. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**What you’ll get:** A folder (if `SplitIntoPages` is true) containing `cmapHtml.html` and associated resources. Open the HTML in a browser and you’ll notice selectable, searchable text that matches the original PDF almost perfectly. + +#### Tips for a clean HTML export + +- **Images vs. vectors:** Set `RasterImagesSavingMode` to `RasterImagesSavingMode.AsEmbeddedPartsOfPng` if you prefer PNGs over JPEGs for sharper graphics. +- **Large PDFs:** Use `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` to keep each page lightweight. + +--- + +## ## Full Working Example – All Three Scenarios in One Project + +Below is a self‑contained console app that demonstrates the three techniques side‑by‑side. Copy‑paste it into a new C# console project, add the Aspose.PDF NuGet package, and adjust the file paths. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Run the program, and you’ll find: + +- `rendered.png` – a perfect image of the first PDF page. +- `stampAutoFit.pdf` – the original PDF with a dynamically sized “Important notice” stamp. +- `cmapHtml.html` (plus page‑specific HTML files) – an HTML version that preserves the original text encoding. + +--- + +## ## Frequently Asked Questions (FAQ) + +**Q: Does `AnalyzeFonts` increase rendering time?** +A: Slightly, because Aspose scans each font stream. The trade‑off is usually worth it for complex PDFs where missing glyphs are unacceptable. + +**Q: Can I render multiple pages in a loop?** +A: Absolutely. Just iterate over `sourcePdf.Pages` and call `pngDevice.Process(page, $"page{page.Number}.png")`. Remember to dispose of each `Document` if you open them separately. + +**Q: What if + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/french/net/conversion-export/_index.md b/pdf/french/net/conversion-export/_index.md index 9e2512226..3a363e98b 100644 --- a/pdf/french/net/conversion-export/_index.md +++ b/pdf/french/net/conversion-export/_index.md @@ -221,6 +221,9 @@ Apprenez à convertir des documents PDF en HTML avec des images PNG externes gr ### [Conversion PDF en HTML avec Aspose.PDF .NET : guide complet](./aspose-pdf-net-pdf-to-html-conversion/) Maîtrisez la conversion PDF en HTML avec Aspose.PDF pour .NET. Améliorez l'accessibilité et l'engagement de vos documents grâce à des options personnalisables. +### [Convertir un PDF en HTML et vérifier la signature PDF – Guide complet Aspose .NET](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Apprenez à convertir des PDF en HTML et à valider leurs signatures numériques avec Aspose.PDF pour .NET. + ### [Conversion PDF en HTML avec Aspose.PDF pour .NET](./pdf-to-html-conversion-aspose-dot-net/) Un tutoriel de code pour Aspose.PDF Net diff --git a/pdf/french/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/french/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..0c14aa305 --- /dev/null +++ b/pdf/french/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,260 @@ +--- +category: general +date: 2026-04-02 +description: Convertir le PDF en HTML tout en conservant les vecteurs, puis vérifier + la signature du PDF à l’aide d’Aspose PDF. Apprenez la conversion PDF avec Aspose + et vérifiez la signature numérique du PDF en C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: fr +og_description: Convertir un PDF en HTML tout en préservant les vecteurs et vérifier + la signature du PDF avec Aspose PDF. Code C# étape par étape, astuces et gestion + des cas limites. +og_title: Convertir un PDF en HTML et vérifier la signature PDF – Tutoriel complet + Aspose .NET +tags: +- Aspose.PDF +- C# +- PDF processing +title: Convertir PDF en HTML et vérifier la signature PDF – Guide complet Aspose .NET +url: /fr/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Convertir PDF en HTML et vérifier la signature PDF – Tutoriel complet Aspose .NET + +Vous avez déjà eu besoin de **convertir PDF en HTML** mais vous craigniez de perdre la qualité vectorielle ou de casser les signatures numériques ? Vous n'êtes pas le seul. De nombreux développeurs se heurtent à un mur lorsqu'un PDF ne contient que des graphiques vectoriels ou une signature numérique basée sur SHA‑3 — les convertisseurs standards rasterisent tout ou ignorent complètement la signature. + +Dans ce guide, nous parcourrons une solution pratique en utilisant **Aspose.Pdf** pour .NET : d'abord nous supprimerons les images raster tout en transformant un PDF uniquement vectoriel en HTML propre, puis nous vous montrerons comment **vérifier la signature PDF** (oui, celle en SHA‑3‑256) et afficher le résultat dans la console. À la fin, vous disposerez d’un programme C# prêt à l’emploi qui réalise les deux tâches, ainsi que d’une série de conseils pour éviter les pièges courants. + +## Ce dont vous avez besoin + +- **Aspose.Pdf for .NET** (la dernière version à la date du 2026‑04, par ex., 23.12). +- Un environnement de développement .NET (Visual Studio 2022 ou VS Code avec l'extension C#). +- Deux PDF d'exemple : + 1. `vectorOnly.pdf` – ne contient que des vecteurs et du texte, aucune image raster. + 2. `signed_sha3.pdf` – signé numériquement avec un hachage SHA‑3‑256. + +Aucun package NuGet supplémentaire au-delà de `Aspose.Pdf` n'est requis. + +--- + +## Étape 1 : Configurer le projet et charger les PDF + +Create a new console app, add the Aspose.Pdf NuGet, and bring the namespaces into scope. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Pourquoi c’est important* : charger les documents dès le départ nous permet de réutiliser les objets à la fois pour la conversion et la vérification de la signature, ce qui maintient une faible consommation de mémoire. + +--- + +## Étape 2 : Convertir le PDF en HTML en ignorant les images raster + +Aspose.Pdf’s `HtmlSaveOptions` gives you fine‑grained control over how images are handled. Setting `RasterImagesSavingMode` to `Skip` tells the library to ignore raster pictures entirely—perfect for a vector‑only source. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Expected output**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Astuce* : Si vous devez plus tard intégrer le HTML dans une page web, le fichier généré ne contient que du SVG et du CSS — aucun gros blob PNG/JPEG. + +--- + +## Étape 3 : Préparer le gestionnaire de signature + +Aspose.Pdf’s `PdfFileSignature` class is the entry point for any digital‑signature work. It reads the signature dictionary, extracts the name, and lets you verify using a specific hash algorithm. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Pourquoi cette étape est cruciale* : sans le gestionnaire vous ne pouvez pas énumérer les signatures ni choisir l'algorithme de hachage dont vous avez besoin (par ex., SHA‑3‑256). + +--- + +## Étape 4 : Énumérer et vérifier chaque signature en utilisant SHA‑3‑256 + +The `GetSignNames()` method returns every signature label in the PDF. Loop through them, call `VerifySignature` with `DigestHashAlgorithm.Sha3_256`, and print the result. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Sample console output**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Cas particulier* : si une signature utilise un autre hachage (par ex., SHA‑256) la vérification renverra `False`. Vous pouvez ajouter une vérification de secours en essayant d’autres valeurs de `DigestHashAlgorithm` dans la boucle. + +--- + +## Étape 5 : Exemple complet fonctionnel (tout le code en un seul endroit) + +Below is the complete program you can copy‑paste into `Program.cs`. Replace `YOUR_DIRECTORY` with the actual folder where your PDFs live. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Run the program (`dotnet run` or press **F5** in Visual Studio). You should see the conversion confirmation followed by the signature verification results. + +--- + +## Questions fréquentes & comment les résoudre + +| Question | Answer | +|----------|--------| +| **Le HTML contiendra-t-il toujours les polices originales ?** | Aspose.Pdf intègre les polices utilisées sous forme d'URI de données base‑64 par défaut, de sorte que le rendu est correct même si la machine hôte ne possède pas ces polices. | +| **Et si mon PDF contient à la fois des vecteurs *et* des images ?** | Conservez `RasterImagesSavingMode = Skip` pour supprimer les images, ou passez à `EmbedAll` si vous en avez besoin. L'option est appliquée par conversion, vous pouvez donc exécuter deux passes si vous avez besoin des deux versions. | +| **Ma signature utilise SHA‑512—comment la vérifier ?** | Remplacez `DigestHashAlgorithm.Sha3_256` par `DigestHashAlgorithm.Sha512`. Vous pouvez même détecter l'algorithme à partir du dictionnaire de signature et le choisir dynamiquement. | +| **Existe-t-il un moyen d’obtenir les détails du certificat du signataire ?** | Oui. Après la vérification, appelez `signatureHandler.GetSignatureInfo(signName).Certificate` pour récupérer le certificat X.509 et inspecter des champs comme `Subject` et `Issuer`. | +| **Et si le PDF est protégé par mot de passe ?** | Chargez‑le avec `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. Le reste du flux de travail reste identique. | + +--- + +## Astuces pro pour un code prêt pour la production + +1. **Libérez correctement les PDF** – Encapsulez les instances `PdfDocument` dans un bloc `using` ou appelez `Dispose()` pour libérer les ressources natives. +2. **Traitement par lots** – Si vous avez des dizaines de PDF, parcourez un répertoire, stockez les résultats dans un CSV, et parallélisez la conversion avec `Parallel.ForEach`. +3. **Journalisation** – Remplacez `Console.WriteLine` par un logger structuré (Serilog, NLog) pour une meilleure traçabilité, surtout lors de la vérification de nombreuses signatures. +4. **Gestion des erreurs** – Capturez `Aspose.Pdf.Exceptions` pour gérer les fichiers corrompus de façon élégante : + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Compatibilité des versions** – Aspose.Pdf évolue rapidement. Testez toujours avec la version exacte référencée dans votre `csproj`. L'API présentée fonctionne pour les versions 23.x et ultérieures. + +--- + +## Conclusion + +Nous venons de **convertir un PDF en HTML** tout en conservant uniquement les vecteurs et le texte, et nous avons **vérifié la signature PDF** en utilisant l'algorithme SHA‑3‑256 — le tout avec quelques lignes de C#. Les principaux enseignements sont : + +- Utilisez `HtmlSaveOptions.RasterImagesSavingMode = Skip` pour un HTML propre, uniquement vectoriel. +- Exploitez `PdfFileSignature` et `DigestHashAlgorithm.Sha3_256` pour **vérifier la signature numérique du PDF** de manière fiable. + +À partir d'ici, vous pouvez explorer des sujets connexes tels que la **conversion aspose pdf** de PDF en PNG, l'extraction de fichiers embarqués, ou la création d'un service web qui accepte des PDF et renvoie des extraits HTML vérifiés. + +Essayez, ajustez les options, et faites‑nous part de vos découvertes. Bon codage ! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/french/net/digital-signatures/_index.md b/pdf/french/net/digital-signatures/_index.md index 8e465d055..e57d9bf72 100644 --- a/pdf/french/net/digital-signatures/_index.md +++ b/pdf/french/net/digital-signatures/_index.md @@ -59,6 +59,12 @@ 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. +### [Vérifier la signature PDF et ajouter la numérotation Bates – Guide complet C#](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Apprenez à valider une signature PDF et à ajouter une numérotation Bates à l'aide d'Aspose.PDF pour .NET en C#. + +### [Comment extraire les signatures d'un PDF – Guide Aspose C#](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Apprenez à extraire les signatures numériques d'un PDF en C# avec Aspose. + ## 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-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/french/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..58d91e3ce --- /dev/null +++ b/pdf/french/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-02 +description: Apprenez comment extraire les signatures, ajouter un champ, ajouter une + page blanche à un PDF, comment ajouter un widget et préserver la transparence d’un + PDF en utilisant Aspose.Pdf en C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: fr +og_description: Comment extraire les signatures d’un PDF et réaliser des tâches connexes + comme l’ajout de champs, de pages blanches, de widgets et la préservation de la + transparence avec Aspose.Pdf. +og_title: Comment extraire les signatures d’un PDF – Guide Aspose C# +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Comment extraire les signatures d’un PDF – Guide Aspose C# +url: /fr/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment extraire des signatures d'un PDF – Aspose C# Guide + +**Comment extraire des signatures d'un PDF** est une exigence courante lorsque vous automatisez le traitement des contrats, les approbations de factures ou tout flux de travail qui repose sur des signatures numériques. +Dans ce guide, nous aborderons également **how to add field**, **add blank page PDF**, **how to add widget**, et **preserve transparency PDF** en utilisant la bibliothèque Aspose.Pdf pour .NET. + +Imaginez que vous receviez des dizaines de PDF signés chaque nuit ; ouvrir manuellement chaque fichier pour vérifier les signatures serait un cauchemar. Avec quelques lignes de code C#, vous pouvez extraire programmatiquement les noms des signatures, conserver vos graphiques d'origine intacts, et même enrichir le document avec de nouveaux champs de formulaire—le tout sans compromettre la transparence ou les profils couleur existants. + +> **Ce que vous obtiendrez :** un exemple complet et exécutable qui convertit un PDF en PDF/X‑4 (en préservant la transparence), extrait chaque nom de signature intégré, ajoute une page vierge et crée un champ de formulaire texte qui apparaît à deux endroits sur la même page. + +## Prérequis + +- .NET 6.0 ou ultérieur (le code fonctionne également avec .NET Framework) +- Aspose.Pdf for .NET **v25.2** ou plus récent (requis pour `GetSignatureNames()`) +- Un projet Visual Studio ou tout IDE C# +- Trois PDF d'exemple dans un dossier que vous contrôlez : + - `source.pdf` – tout PDF que vous souhaitez convertir tout en conservant la transparence + - `signed.pdf` – un PDF qui contient déjà des signatures numériques + - (optionnel) un dossier vide pour les fichiers de sortie + +> **Astuce :** Si vous n'avez pas encore de copie sous licence, vous pouvez demander une licence temporaire gratuite sur le site d'Aspose. Le mode gratuit fonctionne pour les tests mais ajoute un filigrane. + +## Étape 1 – Préserver la transparence du PDF en le convertissant en PDF/X‑4 + +La transparence et les profils couleur intégrés sont souvent perdus lorsque vous aplatissez un PDF. Convertir en **PDF/X‑4** conserve ces éléments visuels intacts, ce qui est crucial pour les documents prêts à l'impression. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Pourquoi c'est important :** +PDF/X‑4 est la norme ISO pour les PDF d'échange graphique qui conservent la transparence active. En utilisant `PdfFormatConversionOptions`, vous évitez le piège courant de rasteriser les objets transparents, ce qui peut augmenter considérablement la taille du fichier et dégrader la qualité. + +## Étape 2 – Comment extraire des signatures d'un PDF + +Aspose a introduit `GetSignatureNames()` dans la version 25.2, rendant l'extraction des signatures aussi simple qu'une ligne de code. La méthode renvoie un tableau des noms logiques attribués à chaque champ de signature numérique. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**Ce à quoi vous attendre :** Si `signed.pdf` contient deux signatures nommées *ManagerSig* et *ClientSig*, la console affichera : + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Gestion des cas limites :** +- Si le PDF ne contient aucune signature, `GetSignatureNames()` renvoie un tableau vide – aucune exception n'est levée. +- Pour les PDF avec des champs de signature corrompus, vous pouvez entourer l'appel d'un `try/catch` et consigner l'erreur sans interrompre le processus complet. + +## Étape 3 – Ajouter une page vierge PDF et créer une zone de texte avec plusieurs widgets + +Ajouter une nouvelle page est simple, mais **how to add field** et **how to add widget** ensemble nécessitent un peu de nuance. Un *widget* est la représentation visuelle d'un champ de formulaire ; vous pouvez attacher plusieurs widgets au même champ logique, permettant aux mêmes données d'apparaître à plusieurs emplacements. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Pourquoi utiliser plusieurs widgets ?** +Supposons que vous ayez besoin que le même commentaire apparaisse à la fois sur le recto et le verso d'un contrat. En attachant deux widgets au même champ, toute modification effectuée par l'utilisateur à un endroit met automatiquement à jour l'autre. + +**Pièges courants :** +- Oublier d'ajouter le champ à `newDoc.Form` rendra le widget invisible dans les visionneuses PDF. +- Utiliser des coordonnées de rectangle identiques pour les deux widgets les superposera—assurez‑vous que les valeurs de `Rectangle` diffèrent. + +## Étape 4 – Assembler le tout : un exemple complet et exécutable + +Voici un programme unique qui exécute chaque étape dans l'ordre présenté. Copiez‑collez‑le dans un nouveau projet console, ajustez les chemins, et exécutez‑le. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Sortie attendue + +Lorsque vous exécutez le programme, vous devriez voir quelque chose comme : + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Ouvrez `TextBoxMultipleWidgets.pdf` dans Adobe Acrobat Reader ; vous remarquerez deux zones de texte identiques intitulées **Comments**—une près du haut, l'autre un peu plus bas. Taper dans l'une met à jour l'autre instantanément. + +## Questions fréquemment posées (FAQ) + +| Question | Réponse | +|----------|--------| +| **Puis-je extraire les octets réels de la signature ?** | `GetSignatureNames()` ne renvoie que les noms logiques. Pour récupérer le certificat ou la valeur de la signature, vous avez besoin des objets `SignatureField` (`document.Form["fieldName"] as SignatureField`). | +| **La conversion PDF/X‑4 fonctionne‑t‑elle sur les PDF chiffrés ?** | Oui, tant que vous fournissez le mot de passe via `Document.Open(file, password)`. | +| **Et si j’ai besoin de plus de deux widgets ?** | Il suffit d’appeler `textBox.Widgets.Add()` pour chaque `WidgetAnnotation` supplémentaire. | +| **La page vierge héritera‑t‑elle de la taille de page du PDF original ?** | La nouvelle page utilise la taille par défaut (A4). Vous pouvez passer un objet `Page` avec des dimensions personnalisées si nécessaire. | +| **Le code est‑il compatible avec .NET Core ?** | Absolument—Aspose.Pdf est multiplateforme. Il suffit de référencer le package NuGet dans votre projet .NET Core. | + +## Conclusion + +Dans ce tutoriel, nous avons démontré **how to extract signatures from PDF** fichiers, tout en couvrant **how to add field**, **add blank page PDF**, **how to add widget**, et **preserve transparency PDF** en utilisant Aspose.Pdf pour C#. Vous disposez maintenant d’une solution complète, prête à être intégrée dans n’importe quel pipeline de traitement de documents. + +Prêt pour le prochain défi ? Essayez de combiner ces techniques avec le module OCR d'Aspose pour lire le texte à partir d'images numérisées + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/french/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..0ce835d14 --- /dev/null +++ b/pdf/french/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,227 @@ +--- +category: general +date: 2026-04-02 +description: Vérifiez rapidement la signature PDF et apprenez comment ajouter une + numérotation Bates à l'aide d'Aspose.Pdf. Comprend du code étape par étape et des + astuces. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: fr +og_description: Vérifiez rapidement la signature d’un PDF et apprenez comment ajouter + une numérotation Bates en utilisant Aspose.Pdf. Suivez l’exemple complet et évitez + les pièges courants. +og_title: Vérifier la signature PDF et ajouter la numérotation Bates – Guide complet + C# +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: Vérifier la signature PDF et ajouter la numérotation Bates – Guide complet + C# +url: /fr/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Vérifier la signature PDF et ajouter la numérotation Bates – Guide complet C# + +Vous avez déjà eu besoin de **vérifier la signature PDF** avant d’envoyer un contrat, mais vous ne saviez pas quelle appel d’API utiliser ? Vous n’êtes pas seul — de nombreux développeurs rencontrent ce problème lorsqu’ils manipulent des PDF juridiquement contraignants. Dans ce tutoriel, nous allons passer en revue exactement comment **vérifier la signature PDF** avec Aspose.Pdf, puis vous montrer **comment ajouter la numérotation Bates** afin que vos fichiers restent prêts pour l’audit. + +Nous aborderons également **comment vérifier la signature** de façon programmatique, couvrirons **comment ajouter les Bates** en une seule passe, et expliquerons les résultats de **check pdf signature** afin que vous puissiez faire confiance à la sortie. À la fin, vous disposerez d’une application console C# exécutable qui réalise les deux tâches — pas de mystère, juste du code clair. + +--- + +## Ce dont vous avez besoin + +- **.NET 6.0** ou version ultérieure (l’exemple fonctionne également avec .NET Framework 4.7+) +- **Aspose.Pdf for .NET** package NuGet (version 23.11 ou plus récente) +- Un fichier PDF signé (`signed.pdf`) que vous souhaitez valider +- Un PDF simple (`input.pdf`) qui recevra les numéros Bates + +Si vous avez tout cela, vous êtes prêt à démarrer. Aucun SDK supplémentaire, aucun fichier de configuration caché. + +--- + +## Étape 1 : Configurer le projet + +Commencez par créer un projet console : + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Ouvrez `Program.cs` et supprimez le code par défaut. Nous allons tout construire à partir de zéro afin que vous puissiez copier‑coller la version finale plus tard. + +--- + +## Étape 2 : Vérifier la signature PDF + +### Pourquoi la vérification est importante + +Une signature numérique peut être **compromise** si le certificat sous‑jacent est révoqué ou si le document a été altéré après la signature. Aspose.Pdf nous fournit la méthode pratique `IsSignatureCompromised` qui renvoie un booléen — simple, mais suffisamment puissante pour la plupart des pipelines d’audit. + +### Extrait de code + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Explication** + +- `Document` charge le PDF en mémoire. +- `PdfFileSignature` enveloppe le document et expose les méthodes liées aux signatures. +- `IsSignatureCompromised("Signature1")` vérifie l’intégrité de la signature nommée *Signature1*. +- Le résultat booléen indique si la signature est toujours fiable. + +> **Astuce :** Si vous ne connaissez pas le nom du champ de signature, appelez d’abord `pdfSignature.GetSignatureNames()` ; cela renvoie la liste de tous les identifiants de signature. + +--- + +## Étape 3 : Préparer les options de numérotation Bates + +### Qu’est‑ce que la numérotation Bates ? + +Les numéros Bates sont des identifiants séquentiels imprimés sur chaque page d’un document juridique ou médico‑légal. Ils facilitent le référencement des pages lors des phases de découverte ou d’audit. `BatesNumberingOptions` d’Aspose.Pdf vous permet de personnaliser le préfixe, le numéro de départ, le nombre de chiffres, l’alignement et la marge—tout cela dans un seul objet. + +### Suite du code + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Explication** + +- `BatesNumberingOptions` centralise tous les choix de formatage. +- `AddBatesNumbering` parcourt chaque page automatiquement—pas besoin de boucle manuelle. +- Le `Prefix` (`INV-`) et le `StartNumber` (1000) produisent des libellés comme `INV-01000`, `INV-01001`, etc. +- Ajustez `BottomMargin` si vous devez placer le numéro plus haut ou plus bas sur la page. + +--- + +## Étape 4 : Exécuter l’exemple complet + +Enregistrez le fichier, puis lancez : + +```bash +dotnet run +``` + +Vous devriez voir deux lignes dans la console : + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Si la première ligne affiche `True`, la signature est compromise—c’est‑à‑dire que le document a pu être modifié après la signature ou que le certificat n’est plus valide. Dans ce cas, interrompez tout traitement en aval. + +--- + +## Étape 5 : Cas limites courants & comment les gérer + +| Situation | Points d’attention | Solution proposée | +|-----------|--------------------|-------------------| +| **Signatures multiples** | `IsSignatureCompromised` ne vérifie qu’un champ à la fois. | Parcourez `pdfSignature.GetSignatureNames()` et vérifiez chacune. | +| **Nom de champ de signature personnalisé** | Utiliser `"Signature1"` peut lever une exception si le nom diffère. | Récupérez d’abord la liste des noms, ou passez le nom exact visible dans Acrobat. | +| **PDF volumineux (100 + pages)** | L’ajout de numéros Bates peut être gourmand en mémoire. | Utilisez `Document.Save` avec `SaveOptions` qui activent le streaming (`PdfSaveOptions { Compress = true }`). | +| **Caractères non latins dans le préfixe** | Certaines polices ne supportent pas Unicode par défaut. | Définissez `pdfWithBates.Font` sur une police compatible Unicode comme `Arial Unicode MS`. | +| **Besoin de placer les numéros à gauche** | L’alignement est codé en dur sur `Right`. | Changez `Alignment = HorizontalAlignment.Left` dans `BatesNumberingOptions`. | + +--- + +## Étape 6 : Vérifier le résultat manuellement (optionnel) + +Ouvrez `BatesNumbered.pdf` dans n’importe quel lecteur PDF : + +1. Parcourez les pages—chacune doit afficher un libellé tel que **INV‑01000** en bas à droite. +2. Utilisez le **Panneau Signature** d’Acrobat, double‑cliquez sur la signature et confirmez que le statut correspond à la sortie console. + +Si tout correspond, vous avez réussi le **check pdf signature** et appliqué le **add bates numbering** en une seule opération. + +--- + +## Questions fréquentes + +**Q : Puis‑je vérifier une signature sans charger tout le document ?** +R : Aspose.Pdf diffuse le fichier en interne, mais vous avez tout de même besoin d’une instance `Document`. Pour les fichiers très volumineux, envisagez d’utiliser directement `PdfFileSignature` avec un flux de fichier afin de réduire l’empreinte mémoire. + +**Q : Ai‑je besoin d’une licence pour Aspose.Pdf ?** +R : Une évaluation gratuite fonctionne, mais elle ajoute un filigrane. En production, vous devez acquérir une licence ; sinon les PDF générés porteront le bandeau Aspose. + +**Q : Et si je ne veux ajouter les numéros Bates qu’à un sous‑ensemble de pages ?** +R : Utilisez `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` où le tableau indique les numéros de pages à numéroter. + +--- + +## Conclusion + +Vous savez maintenant **comment vérifier la signature PDF** avec Aspose.Pdf, comprendre la signification du résultat booléen, et ajouter en toute confiance la **numérotation Bates** à n’importe quel PDF que vous contrôlez. L’exemple complet, exécutable, combine les deux tâches, vous offrant un outil console unique qui vérifie l’authenticité d’un document et le tamponne avec des identifiants prêts pour l’audit. + +Ensuite, vous pourrez explorer **comment vérifier la signature** par rapport à un magasin de certificats de confiance, ou expérimenter des styles personnalisés de **add bates numbering** tels que des tampons diagonaux ou des préfixes par section. Les deux sujets s’appuient sur les bases que vous venez d’acquérir et rendront votre pipeline de traitement de documents encore plus robuste. + +Bon codage, et rappelez‑vous — vérifier les signatures et numéroter les pages devient un jeu d’enfant une fois que vous avez le bon code en main ! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/french/net/printing-rendering/_index.md index 3ec66d773..3c0d9d417 100644 --- a/pdf/french/net/printing-rendering/_index.md +++ b/pdf/french/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Découvrez comment imprimer efficacement des pages spécifiques d'un PDF avec As ### [Définir un facteur de zoom personnalisé dans les fichiers PDF avec Aspose.PDF pour .NET - Guide complet](./aspose-pdf-net-set-zoom-factor-pdfs/) Découvrez comment définir un facteur de zoom personnalisé dans les documents PDF avec Aspose.PDF pour .NET. Ce guide couvre l'installation, les étapes de mise en œuvre et les applications pratiques. +### [Comment rendre un PDF en C# – Guide complet pour PNG, HTML et le marquage](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Découvrez comment convertir des PDF en images PNG, générer du HTML et appliquer des filigranes avec Aspose.PDF pour .NET. + ## Ressources supplémentaires - [Aspose.PDF pour la documentation réseau](https://docs.aspose.com/pdf/net/) diff --git a/pdf/french/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/french/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..54dd7a62b --- /dev/null +++ b/pdf/french/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-04-02 +description: Comment rendre un PDF avec Aspose.PDF en C#. Apprenez à convertir un + PDF en PNG, à enregistrer le PDF au format HTML et à ajouter des tampons de texte + auto‑ajustés efficacement. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: fr +og_description: Comment rendre un PDF avec Aspose.PDF en C#. Ce guide montre comment + rendre un PDF en PNG, l’enregistrer en HTML et créer des tampons de texte auto‑ajustés. +og_title: Comment rendre un PDF en C# – PNG, HTML et tampons auto‑ajustés +tags: +- Aspose.PDF +- C# +- PDF processing +title: Comment rendre un PDF en C# – Guide complet du PNG, du HTML et du filigrane +url: /fr/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment rendre un PDF en C# – Guide complet pour PNG, HTML & le tamponnage + +Vous vous êtes déjà demandé **comment rendre un PDF** dans une application .NET sans perdre le moindre glyphe ? Peut‑être avez‑vous essayé un `PdfRenderer` rapide pour découvrir des caractères manquants, ou vous avez besoin d’un PNG net pour une vignette mais le rendu apparaît criblé. D’après mon expérience, la bonne combinaison d’options de rendu et de gestion des polices fait la différence entre un aperçu cassé et une image pixel‑perfect. + +Dans ce tutoriel, nous passerons en revue trois scénarios concrets avec Aspose.PDF for .NET : rendre une page PDF en PNG tout en analysant les polices, ajouter un `TextStamp` qui redimensionne automatiquement sa police, et enregistrer un PDF en HTML en utilisant la table CMap de la police. À la fin, vous serez capable de **render PDF to PNG**, **convert PDF page PNG**, **export PDF page image**, et même **save PDF as HTML** sans accroc. + +## Prérequis + +- .NET 6.0 ou version ultérieure (le code fonctionne également avec .NET Framework 4.6+) +- Package NuGet Aspose.PDF for .NET (`Install-Package Aspose.PDF`) +- Un fichier PDF avec des polices complexes (par ex., `complexFonts.pdf`) pour la démonstration de rendu +- Une connaissance de base du C# et de Visual Studio (ou tout autre IDE de votre choix) + +> **Astuce pro :** Si vous travaillez sur un serveur CI, assurez‑vous que le fichier de licence Aspose soit soit intégré comme ressource, soit référencé via une variable d’environnement afin d’éviter les filigranes d’évaluation. + +--- + +## ## Rendre un PDF en PNG avec analyse des polices + +### Pourquoi analyser les polices ? + +Lorsqu’un PDF contient des polices personnalisées ou incorporées, un rendu naïf peut omettre des glyphes que le moteur ne sait pas mapper. Activer `AnalyzeFonts` oblige Aspose à inspecter les flux de polices et à substituer les glyphes manquants, garantissant ainsi une image fidèle. + +### Implémentation étape par étape + +1. **Créer un `PngDevice` avec `AnalyzeFonts` activé.** +2. **Charger le PDF source** à l’aide de `Document`. +3. **Traiter la page souhaitée** et écrire le PNG sur le disque. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**Ce que vous devriez voir :** Un fichier nommé `rendered.png` dans `YOUR_DIRECTORY` qui ressemble exactement à la première page de `complexFonts.pdf`, y compris tous les caractères spéciaux et les diacritiques. + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### Pièges courants & comment les éviter + +- **Polices manquantes sur le serveur :** Si le PDF référence des polices non incorporées, placez ces polices dans le chemin de recherche de l’application ou activez `FontRepository` pour pointer vers un dossier personnalisé. +- **PDF volumineux :** Rendre de nombreuses pages dans une boucle peut consommer beaucoup de mémoire ; libérez chaque instance de `Document` rapidement ou utilisez des blocs `using` comme indiqué. + +--- + +## ## Ajouter un TextStamp auto‑ajusté (Render PDF avec texte dynamique) + +### Quand avez‑vous besoin d’un tampon à taille dynamique ? + +Imaginez que vous générez des factures et que vous devez superposer un filigrane « PAID » qui s’ajuste à n’importe quel rectangle que vous choisissez, quelle que soit la longueur du texte. Calculer manuellement la taille de la police est source d’erreurs ; `AutoAdjustFontSizeToFitStampRectangle` d’Aspose fait le travail lourd à votre place. + +### Implémentation étape par étape + +1. **Configurer un `TextStamp`** avec les propriétés d’auto‑ajustement. +2. **Charger le PDF cible** que vous souhaitez tamponner. +3. **Ajouter le tampon à une page** et enregistrer le résultat. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Résultat :** `stampAutoFit.pdf` contient le texte « Important notice » parfaitement dimensionné dans le rectangle de 300 × 150 pt, quel que soit la longueur de la chaîne d’origine. + +#### Cas limites à considérer + +- **Chaînes très longues :** Si le texte dépasse le rectangle même à la plus petite taille de police, Aspose le tronquera selon le `WordWrapMode`. Vous pouvez pré‑vérifier la longueur ou augmenter la taille du rectangle. +- **Multiples tampons :** Réutiliser la même instance de `TextStamp` sur différentes pages fonctionne, mais rappelez‑vous que les propriétés de position (`Left`, `Top`) conservent leurs dernières valeurs — réinitialisez‑les si nécessaire. + +--- + +## ## Enregistrer un PDF en HTML en utilisant la table CMap de la police + +### Pourquoi se soucier de la table CMap ? + +Lorsque vous convertissez un PDF en HTML, préserver le mappage Unicode est crucial pour un texte recherchable. La stratégie basée sur la CMap oblige Aspose à privilégier la table de caractères interne de la police, ce qui donne souvent une extraction de texte plus précise qu’un encodage générique. + +### Implémentation étape par étape + +1. **Créer `HtmlSaveOptions`** avec la règle d’encodage basée sur la CMap. +2. **Charger le PDF source**. +3. **Enregistrer en HTML** en utilisant les options configurées. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**Ce que vous obtiendrez :** Un dossier (si `SplitIntoPages` est vrai) contenant `cmapHtml.html` et les ressources associées. Ouvrez le HTML dans un navigateur et vous constaterez un texte sélectionnable et recherchable qui correspond presque parfaitement au PDF original. + +#### Conseils pour un export HTML propre + +- **Images vs. vecteurs :** Réglez `RasterImagesSavingMode` sur `RasterImagesSavingMode.AsEmbeddedPartsOfPng` si vous préférez des PNGs aux JPEGs pour des graphiques plus nets. +- **PDF volumineux :** Utilisez `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` pour garder chaque page légère. + +--- + +## ## Exemple complet – Les trois scénarios dans un même projet + +Voici une application console autonome qui démontre les trois techniques côte à côte. Copiez‑collez‑le dans un nouveau projet console C#, ajoutez le package NuGet Aspose.PDF, et ajustez les chemins de fichiers. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Exécutez le programme, et vous trouverez : + +- `rendered.png` – une image parfaite de la première page du PDF. +- `stampAutoFit.pdf` – le PDF original avec un tampon « Important notice » à taille dynamique. +- `cmapHtml.html` (plus les fichiers HTML spécifiques aux pages) – une version HTML qui préserve l’encodage texte original. + +--- + +## ## FAQ (Foire aux questions) + +**Q : `AnalyzeFonts` augmente‑t‑il le temps de rendu ?** +R : Légèrement, car Aspose parcourt chaque flux de police. Le compromis vaut généralement le coup pour les PDF complexes où les glyphes manquants sont inacceptables. + +**Q : Puis‑je rendre plusieurs pages dans une boucle ?** +R : Absolument. Il suffit d’itérer sur `sourcePdf.Pages` et d’appeler `pngDevice.Process(page, $"page{page.Number}.png")`. N’oubliez pas de libérer chaque `Document` si vous les ouvrez séparément. + +**Q : Que faire si + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 49638de0c..efa2b373a 100644 --- a/pdf/german/net/conversion-export/_index.md +++ b/pdf/german/net/conversion-export/_index.md @@ -206,21 +206,15 @@ Erfahren Sie in diesem Schritt-für-Schritt-Tutorial, wie Sie mit Aspose.PDF fü ### [So verfolgen Sie den PDF-Konvertierungsfortschritt mit Aspose.PDF für .NET: Eine Schritt-für-Schritt-Anleitung](./track-pdf-conversion-progress-aspose-dotnet/) Erfahren Sie, wie Sie den Fortschritt der PDF-Konvertierung mit Aspose.PDF für .NET effizient verfolgen. Folgen Sie dieser Schritt-für-Schritt-Anleitung, um Dokumenten-Workflows zu verbessern und das Benutzerfeedback zu verbessern. -### [Master Aspose.PDF .NET: Konvertieren Sie PDF in HTML mit benutzerdefiniertem CSS](./aspose-pdf-net-license-html-conversion-custom-css/) -Erfahren Sie, wie Sie eine Aspose.PDF-Lizenz anwenden und PDFs mit benutzerdefiniertem CSS und C# in HTML konvertieren. Schalten Sie noch heute alle Funktionen zur Dokumentverarbeitung frei. - -### [Meistern Sie die Schriftartensubstitution und PDF-Konvertierung mit Aspose.PDF .NET für Compliance und Markenkonsistenz](./mastering-font-substitution-pdf-conversion-asposepdf-net/) -Erfahren Sie, wie Sie fehlende Schriftarten durch Ersetzen verwalten und PDFs mit Aspose.PDF .NET in standardisierte Formate konvertieren. Stellen Sie Compliance und Markenkonsistenz auf allen Plattformen sicher. - -### [Meistern Sie die PDF-zu-HTML-Konvertierung mit Schriftartenverwaltung in Aspose.PDF für .NET](./optimize-pdf-to-html-font-handling-aspose-net/) -Erfahren Sie, wie Sie die Konvertierung von PDF in HTML mit Aspose.PDF für .NET optimieren, wobei der Schwerpunkt auf der effizienten Handhabung von Schriftartressourcen und der nahtlosen Integration liegt. - ### [PDF-zu-HTML-Konvertierung mit Aspose.PDF .NET: Bilder als externe PNGs speichern](./pdf-to-html-conversion-external-png-aspose-pdf-net/) Erfahren Sie, wie Sie PDF-Dokumente mit externen PNG-Bildern mit Aspose.PDF für .NET in HTML konvertieren. Diese Anleitung gewährleistet Layouterhaltung und optimierte Web-Performance. ### [PDF-zu-HTML-Konvertierung mit Aspose.PDF .NET: Ein umfassender Leitfaden](./aspose-pdf-net-pdf-to-html-conversion/) Meistern Sie die PDF-zu-HTML-Konvertierung mit Aspose.PDF für .NET. Verbessern Sie die Zugänglichkeit und Interaktion von Dokumenten mit anpassbaren Optionen. +### [PDF in HTML konvertieren und PDF-Signatur überprüfen – Vollständige Aspose .NET-Anleitung](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Erfahren Sie, wie Sie PDFs mit Aspose.PDF für .NET in HTML umwandeln und die digitale Signatur prüfen. + ### [PDF-zu-HTML-Konvertierung mit Aspose.PDF für .NET](./pdf-to-html-conversion-aspose-dot-net/) Ein Code-Tutorial für Aspose.PDF Net diff --git a/pdf/german/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/german/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..d86a6e550 --- /dev/null +++ b/pdf/german/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,260 @@ +--- +category: general +date: 2026-04-02 +description: PDF in HTML konvertieren und dabei Vektoren beibehalten, dann die PDF‑Signatur + mit Aspose PDF überprüfen. Lernen Sie die Aspose‑PDF-Konvertierung und prüfen Sie + die digitale PDF‑Signatur in C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: de +og_description: PDF in HTML konvertieren und dabei Vektoren erhalten sowie die PDF‑Signatur + mit Aspose PDF überprüfen. Schritt‑für‑Schritt C#‑Code, Tipps und Umgang mit Sonderfällen. +og_title: PDF in HTML konvertieren & PDF‑Signatur überprüfen – Vollständiges Aspose + .NET Tutorial +tags: +- Aspose.PDF +- C# +- PDF processing +title: PDF in HTML konvertieren und PDF‑Signatur überprüfen – Vollständiger Aspose + .NET‑Leitfaden +url: /de/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF in HTML konvertieren und PDF-Signatur überprüfen – Komplettes Aspose .NET Tutorial + +Haben Sie jemals **PDF in HTML konvertieren** müssen, waren aber besorgt, dass die Vektorqualität verloren geht oder digitale Signaturen beschädigt werden? Sie sind nicht allein. Viele Entwickler stoßen an Grenzen, wenn ein PDF nur Vektorgrafiken oder eine SHA‑3‑basierte digitale Signatur enthält – Standardkonverter rasterisieren entweder alles oder ignorieren die Signatur vollständig. + +In diesem Leitfaden führen wir Sie durch eine praktische Lösung mit **Aspose.Pdf** für .NET: Zuerst entfernen wir Rasterbilder und verwandeln ein rein vektorbasiertes PDF in sauberes HTML, dann zeigen wir Ihnen, wie Sie **PDF‑Signatur überprüfen** (ja, die SHA‑3‑256‑Version) und das Ergebnis in der Konsole ausgeben. Am Ende haben Sie ein sofort ausführbares C#‑Programm, das beide Aufgaben erledigt, plus einige Tipps, um häufige Fallstricke zu vermeiden. + +## Was Sie benötigen + +- **Aspose.Pdf für .NET** (die neueste Version zum Stand 2026‑04, z. B. 23.12). +- Eine .NET‑Entwicklungsumgebung (Visual Studio 2022 oder VS Code mit der C#‑Erweiterung). +- Zwei Beispiel‑PDFs: + 1. `vectorOnly.pdf` – enthält nur Vektoren und Text, keine Rasterbilder. + 2. `signed_sha3.pdf` – digital signiert mit einem SHA‑3‑256‑Hash. + +Keine zusätzlichen NuGet‑Pakete über `Aspose.Pdf` hinaus sind erforderlich. + +--- + +## Schritt 1: Projekt einrichten und PDFs laden + +Erstellen Sie eine neue Konsolenanwendung, fügen Sie das Aspose.Pdf‑NuGet‑Paket hinzu und importieren Sie die Namespaces. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Warum das wichtig ist*: Das vorzeitige Laden der Dokumente ermöglicht es uns, die Objekte sowohl für die Konvertierung als auch für die Signaturüberprüfung wiederzuverwenden, wodurch der Speicherverbrauch gering bleibt. + +--- + +## Schritt 2: PDF in HTML konvertieren und Rasterbilder überspringen + +`HtmlSaveOptions` von Aspose.Pdf bietet Ihnen eine feinkörnige Kontrolle darüber, wie Bilder behandelt werden. Durch das Setzen von `RasterImagesSavingMode` auf `Skip` wird die Bibliothek angewiesen, Rasterbilder vollständig zu ignorieren – ideal für eine rein vektorbasierte Quelle. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Erwartete Ausgabe**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Profi‑Tipp*: Wenn Sie das HTML später in eine Webseite einbetten müssen, enthält die erzeugte Datei nur SVG und CSS – keine sperrigen PNG/JPEG‑Blobs. + +--- + +## Schritt 3: Signatur‑Handler vorbereiten + +`PdfFileSignature`‑Klasse von Aspose.Pdf ist der Einstiegspunkt für jede Arbeit mit digitalen Signaturen. Sie liest das Signatur‑Verzeichnis, extrahiert den Namen und ermöglicht die Verifizierung mit einem bestimmten Hash‑Algorithmus. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Warum dieser Schritt entscheidend ist*: Ohne den Handler können Sie keine Signaturen auflisten oder den benötigten Hash‑Algorithmus auswählen (z. B. SHA‑3‑256). + +--- + +## Schritt 4: Jede Signatur mit SHA‑3‑256 auflisten und überprüfen + +Die Methode `GetSignNames()` gibt alle Signatur‑Bezeichnungen im PDF zurück. Durchlaufen Sie sie, rufen Sie `VerifySignature` mit `DigestHashAlgorithm.Sha3_256` auf und geben Sie das Ergebnis aus. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Beispielhafte Konsolenausgabe**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Randfall*: Wenn eine Signatur einen anderen Hash verwendet (z. B. SHA‑256), gibt die Verifizierung `False` zurück. Sie können eine Rückfallprüfung hinzufügen, indem Sie innerhalb der Schleife andere `DigestHashAlgorithm`‑Werte ausprobieren. + +--- + +## Schritt 5: Vollständiges funktionierendes Beispiel (Gesamter Code an einem Ort) + +Unten finden Sie das komplette Programm, das Sie in `Program.cs` einfügen können. Ersetzen Sie `YOUR_DIRECTORY` durch den tatsächlichen Ordner, in dem Ihre PDFs liegen. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Führen Sie das Programm aus (`dotnet run` oder drücken Sie **F5** in Visual Studio). Sie sollten die Bestätigung der Konvertierung gefolgt von den Ergebnissen der Signaturüberprüfung sehen. + +--- + +## Häufige Fragen & wie man sie löst + +| Frage | Antwort | +|----------|--------| +| **Enthält das HTML weiterhin die ursprünglichen Schriftarten?** | Aspose.Pdf bettet die verwendeten Schriftarten standardmäßig als Base‑64‑Data‑URIs ein, sodass die Ausgabe korrekt gerendert wird, selbst wenn das Host‑System diese Schriftarten nicht besitzt. | +| **Was ist, wenn mein PDF sowohl Vektoren *als auch* Bilder enthält?** | Behalten Sie `RasterImagesSavingMode = Skip` bei, um Bilder zu entfernen, oder wechseln Sie zu `EmbedAll`, wenn Sie sie benötigen. Die Option gilt pro Konvertierung, sodass Sie bei Bedarf zwei Durchläufe ausführen können, um beide Versionen zu erhalten. | +| **Meine Signatur verwendet SHA‑512 – wie verifiziere ich sie?** | Ersetzen Sie `DigestHashAlgorithm.Sha3_256` durch `DigestHashAlgorithm.Sha512`. Sie können den Algorithmus sogar aus dem Signatur‑Verzeichnis ermitteln und dynamisch auswählen. | +| **Gibt es eine Möglichkeit, die Zertifikatsdetails des Unterzeichners zu erhalten?** | Ja. Nach der Verifizierung rufen Sie `signatureHandler.GetSignatureInfo(signName).Certificate` auf, um das X.509‑Zertifikat abzurufen und Felder wie `Subject` und `Issuer` zu prüfen. | +| **Was ist, wenn das PDF passwortgeschützt ist?** | Laden Sie es mit `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. Der Rest des Workflows bleibt unverändert. | + +--- + +## Profi‑Tipps für produktionsbereiten Code + +1. **PDFs korrekt freigeben** – Packen Sie `PdfDocument`‑Instanzen in einen `using`‑Block oder rufen Sie `Dispose()` auf, um native Ressourcen freizugeben. +2. **Stapelverarbeitung** – Wenn Sie Dutzende PDFs haben, iterieren Sie über ein Verzeichnis, speichern Sie die Ergebnisse in einer CSV und parallelisieren Sie die Konvertierung mit `Parallel.ForEach`. +3. **Logging** – Ersetzen Sie `Console.WriteLine` durch einen strukturierten Logger (Serilog, NLog) für bessere Nachverfolgbarkeit, insbesondere beim Verifizieren vieler Signaturen. +4. **Fehlerbehandlung** – Fangen Sie `Aspose.Pdf.Exceptions`, um beschädigte Dateien elegant zu behandeln: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Versionskompatibilität** – Aspose.Pdf entwickelt sich schnell. Testen Sie stets mit der exakt in Ihrem `csproj` referenzierten Version. Die gezeigte API funktioniert für 23.x und höher. + +--- + +## Fazit + +Wir haben gerade **PDF in HTML konvertiert**, wobei nur Vektoren und Text erhalten bleiben, und wir haben die **PDF‑Signatur** mit dem SHA‑3‑256‑Algorithmus **überprüft** – alles mit nur wenigen Zeilen C#. Die wichtigsten Erkenntnisse sind: + +- Verwenden Sie `HtmlSaveOptions.RasterImagesSavingMode = Skip` für sauberes, rein vektorbasiertes HTML. +- Nutzen Sie `PdfFileSignature` und `DigestHashAlgorithm.Sha3_256`, um **PDF‑Digitalsignaturen** zuverlässig zu prüfen. + +Ab hier können Sie verwandte Themen erkunden, wie **aspose pdf conversion** von PDFs zu PNG, das Extrahieren eingebetteter Dateien oder den Aufbau eines Web‑Service, der PDFs entgegennimmt und verifizierte HTML‑Snippets zurückgibt. + +Probieren Sie es aus, passen Sie die Optionen an und teilen Sie uns Ihre Entdeckungen mit. Viel Spaß beim Coden! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/german/net/digital-signatures/_index.md b/pdf/german/net/digital-signatures/_index.md index 951813a4f..ab15e8ad0 100644 --- a/pdf/german/net/digital-signatures/_index.md +++ b/pdf/german/net/digital-signatures/_index.md @@ -58,12 +58,19 @@ 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. +### [PDF-Signatur überprüfen und Bates-Nummerierung hinzufügen – Vollständiger C#‑Leitfaden](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Erfahren Sie, wie Sie PDF‑Signaturen prüfen und gleichzeitig Bates‑Nummerierung in C# hinzufügen. + +### [So extrahieren Sie Signaturen aus PDF – Aspose C#‑Leitfaden](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Erfahren Sie, wie Sie mit Aspose.PDF für .NET Signaturen aus PDF-Dateien extrahieren. + ## Weitere Ressourcen - [Aspose.PDF für Net-Dokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/german/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/german/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..478e744db --- /dev/null +++ b/pdf/german/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-02 +description: Erfahren Sie, wie Sie Signaturen extrahieren, Felder hinzufügen, eine + leere PDF-Seite einfügen, Widgets hinzufügen und die Transparenz von PDFs mit Aspose.Pdf + in C# beibehalten. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: de +og_description: Wie man Signaturen aus einer PDF extrahiert und verwandte Aufgaben + wie das Hinzufügen von Feldern, leeren Seiten, Widgets und das Beibehalten von Transparenz + mit Aspose.Pdf durchführt. +og_title: Wie man Signaturen aus PDF extrahiert – Aspose C#‑Leitfaden +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Wie man Signaturen aus PDF extrahiert – Aspose C#‑Leitfaden +url: /de/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man Signaturen aus PDF extrahiert – Aspose C#‑Leitfaden + +**Wie man Signaturen aus einem PDF extrahiert** ist ein häufiges Anliegen, wenn Sie die Vertragsverarbeitung, Rechnungsfreigaben oder irgendeinen Workflow automatisieren, der auf digitalen Signaturen beruht. +In diesem Leitfaden zeigen wir außerdem **wie man ein Feld hinzufügt**, **wie man eine leere Seite zu einem PDF hinzufügt**, **wie man ein Widget hinzufügt** und **wie man Transparenz in PDFs bewahrt** mithilfe der Aspose.Pdf‑Bibliothek für .NET. + +Stellen Sie sich vor, Sie erhalten jede Nacht Dutzende unterschriebener PDFs; jedes Dokument manuell zu öffnen, um die Signaturen zu prüfen, wäre ein Albtraum. Mit ein paar Zeilen C#‑Code können Sie programmgesteuert die Namen der Signaturen auslesen, Ihre Originalgrafiken unverändert lassen und sogar das Dokument mit neuen Formularfeldern anreichern – und das, ohne die vorhandene Transparenz oder Farbprofile zu zerstören. + +> **Was Sie erhalten:** ein vollständiges, ausführbares Beispiel, das ein PDF in PDF/X‑4 konvertiert (Transparenz wird erhalten), jede eingebettete Signatur ausliest, eine leere Seite hinzufügt und ein Textfeld‑Formular erstellt, das an zwei Stellen auf derselben Seite erscheint. + +## Voraussetzungen + +- .NET 6.0 oder höher (der Code funktioniert auch mit dem .NET Framework) +- Aspose.Pdf für .NET **v25.2** oder neuer (erforderlich für `GetSignatureNames()`) +- Ein Visual‑Studio‑Projekt oder eine beliebige C#‑IDE +- Drei Beispiel‑PDFs in einem Ordner Ihrer Wahl: + - `source.pdf` – ein beliebiges PDF, das Sie konvertieren möchten, wobei die Transparenz erhalten bleiben soll + - `signed.pdf` – ein PDF, das bereits digitale Signaturen enthält + - (optional) ein leerer Ordner für die Ausgabedateien + +> **Pro‑Tipp:** Wenn Sie noch keine lizenzierte Kopie besitzen, können Sie auf der Aspose‑Website eine kostenlose temporäre Lizenz anfordern. Der Gratis‑Modus funktioniert für Tests, fügt jedoch ein Wasserzeichen hinzu. + +## Schritt 1 – Transparenz in PDF bewahren durch Konvertierung zu PDF/X‑4 + +Transparenz und eingebettete Farbprofile gehen häufig verloren, wenn ein PDF flachgelegt wird. Die Konvertierung zu **PDF/X‑4** bewahrt diese visuellen Elemente, was für druckfertige Dokumente entscheidend ist. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Warum das wichtig ist:** +PDF/X‑4 ist der ISO‑Standard für Grafik‑Austausch‑PDFs, die lebende Transparenz behalten. Durch die Verwendung von `PdfFormatConversionOptions` vermeiden Sie die häufige Falle, transparente Objekte zu rasterisieren, was die Dateigröße dramatisch erhöhen und die Qualität mindern kann. + +## Schritt 2 – Wie man Signaturen aus einem PDF extrahiert + +Aspose hat `GetSignatureNames()` in Version 25.2 eingeführt, wodurch die Signatur‑Extraktion zu einer einzigen Zeile wird. Die Methode gibt ein Array der logischen Namen zurück, die jedem digitalen Signaturfeld zugewiesen sind. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**Was zu erwarten ist:** Wenn `signed.pdf` zwei Signaturen mit den Namen *ManagerSig* und *ClientSig* enthält, gibt die Konsole Folgendes aus: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Umgang mit Sonderfällen:** +- Hat das PDF keine Signaturen, liefert `GetSignatureNames()` ein leeres Array – es wird keine Ausnahme ausgelöst. +- Bei PDFs mit beschädigten Signaturfeldern können Sie den Aufruf in ein `try/catch` einbetten und den Fehler protokollieren, ohne den gesamten Prozess abzubrechen. + +## Schritt 3 – Leere Seite zu PDF hinzufügen und ein Textfeld mit mehreren Widgets erstellen + +Eine neue Seite hinzuzufügen ist unkompliziert, aber **wie man ein Feld hinzufügt** und **wie man ein Widget hinzufügt** erfordert ein wenig Feingefühl. Ein *Widget* ist die visuelle Darstellung eines Formularfeldes; Sie können mehrere Widgets an dasselbe logische Feld anhängen, sodass dieselben Daten an mehreren Stellen erscheinen. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Warum mehrere Widgets verwenden?** +Stellen Sie sich vor, derselbe Kommentar soll sowohl auf der Vorder- als auch auf der Rückseite eines Vertrags erscheinen. Durch das Anhängen von zwei Widgets an dasselbe Feld wird jede Änderung, die der Benutzer an einer Stelle vornimmt, automatisch an der anderen Stelle aktualisiert. + +**Häufige Stolperfallen:** +- Wird das Feld nicht zu `newDoc.Form` hinzugefügt, bleibt das Widget in PDF‑Betrachtern unsichtbar. +- Verwenden Sie identische Rechteckkoordinaten für beide Widgets, werden sie übereinander gestapelt – stellen Sie sicher, dass die `Rectangle`‑Werte unterschiedlich sind. + +## Schritt 4 – Alles zusammenführen: Ein vollständiges, ausführbares Beispiel + +Unten finden Sie ein einzelnes Programm, das jeden Schritt in der vorgestellten Reihenfolge ausführt. Kopieren Sie den Code in ein neues Konsolen‑Projekt, passen Sie die Pfade an und führen Sie ihn aus. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Erwartete Ausgabe + +Beim Ausführen des Programms sollte etwa Folgendes erscheinen: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Öffnen Sie `TextBoxMultipleWidgets.pdf` in Adobe Acrobat Reader; Sie werden zwei identische Textfelder mit der Beschriftung **Comments** sehen – eines oben, eines etwas weiter unten. Eine Eingabe in eines der Felder aktualisiert das andere sofort. + +## Häufig gestellte Fragen (FAQ) + +| Frage | Antwort | +|----------|--------| +| **Kann ich die tatsächlichen Signatur‑Bytes extrahieren?** | `GetSignatureNames()` liefert nur logische Namen. Um das Zertifikat oder den Signaturwert zu erhalten, benötigen Sie `SignatureField`‑Objekte (`document.Form["fieldName"] as SignatureField`). | +| **Funktioniert die PDF/X‑4‑Konvertierung bei verschlüsselten PDFs?** | Ja, solange Sie das Passwort über `Document.Open(file, password)` übergeben. | +| **Was, wenn ich mehr als zwei Widgets brauche?** | Rufen Sie einfach `textBox.Widgets.Add()` für jedes zusätzliche `WidgetAnnotation` auf. | +| **Erbt die leere Seite die Seitengröße des Original‑PDFs?** | Die neue Seite verwendet die Standardgröße (A4). Sie können ein `Page`‑Objekt mit benutzerdefinierten Abmessungen übergeben, falls nötig. | +| **Ist der Code mit .NET Core kompatibel?** | Absolut – Aspose.Pdf ist plattformübergreifend. Binden Sie einfach das NuGet‑Paket in Ihr .NET‑Core‑Projekt ein. | + +## Fazit + +In diesem Tutorial haben wir gezeigt, **wie man Signaturen aus PDF‑Dateien extrahiert**, und gleichzeitig **wie man ein Feld hinzufügt**, **eine leere Seite zu einem PDF hinzufügt**, **wie man ein Widget hinzufügt** und **wie man Transparenz in PDFs bewahrt** mithilfe von Aspose.Pdf für C#. Sie verfügen nun über eine solide End‑zu‑End‑Lösung, die Sie in jede Dokument‑Verarbeitungspipeline einbinden können. + +Bereit für die nächste Herausforderung? Kombinieren Sie diese Techniken mit Asposes OCR‑Modul, um Text aus gescannten + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/german/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..0af691f51 --- /dev/null +++ b/pdf/german/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,225 @@ +--- +category: general +date: 2026-04-02 +description: Überprüfen Sie PDF‑Signaturen schnell und lernen Sie, wie Sie Bates‑Nummerierung + mit Aspose.Pdf hinzufügen. Enthält Schritt‑für‑Schritt‑Code und Tipps. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: de +og_description: Überprüfen Sie PDF‑Signaturen schnell und lernen Sie, wie Sie Bates‑Nummerierung + mit Aspose.Pdf hinzufügen. Folgen Sie dem vollständigen Beispiel und vermeiden Sie + häufige Fallstricke. +og_title: PDF-Signatur überprüfen und Bates-Nummerierung hinzufügen – Vollständiger + C#‑Leitfaden +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: PDF‑Signatur überprüfen und Bates‑Nummerierung hinzufügen – Vollständiger C#‑Leitfaden +url: /de/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF‑Signatur überprüfen und Bates‑Nummerierung hinzufügen – Vollständige C#‑Anleitung + +Haben Sie jemals **PDF‑Signatur überprüfen** müssen, bevor Sie einen Vertrag versenden, waren sich aber nicht sicher, welchen API‑Aufruf Sie verwenden sollen? Sie sind nicht allein – viele Entwickler stoßen an diese Hürde, wenn sie rechtlich bindende PDFs verarbeiten. In diesem Tutorial zeigen wir Ihnen Schritt für Schritt, wie Sie **PDF‑Signatur überprüfen** mit Aspose.Pdf und anschließend **wie Sie Bates‑Nummerierung hinzufügen** können, damit Ihre Dateien audit‑bereit bleiben. + +Wir werden außerdem auf **wie man Signatur programmgesteuert überprüft**, **wie man Bates in einem Durchgang hinzufügt** eingehen und die Ergebnisse von **check pdf signature** erklären, sodass Sie dem Output vertrauen können. Am Ende haben Sie eine ausführbare C#‑Konsolenanwendung, die beide Aufgaben erledigt – kein Rätsel, nur klarer Code. + +--- + +## Was Sie benötigen + +- **.NET 6.0** oder höher (das Beispiel funktioniert auch mit .NET Framework 4.7+) +- **Aspose.Pdf for .NET** NuGet‑Paket (Version 23.11 oder neuer) +- Eine signierte PDF‑Datei (`signed.pdf`), die Sie validieren möchten +- Eine einfache PDF (`input.pdf`), die die Bates‑Nummern erhalten soll + +Wenn Sie das haben, können Sie loslegen. Keine zusätzlichen SDKs, keine versteckten Konfigurationsdateien. + +--- + +## Schritt 1: Projekt einrichten + +Beginnen Sie mit der Erstellung eines Konsolenprojekts: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Öffnen Sie `Program.cs` und löschen Sie den Standardcode. Wir bauen alles von Grund auf neu, damit Sie die endgültige Version später kopieren‑und‑einfügen können. + +--- + +## Schritt 2: PDF‑Signatur überprüfen + +### Warum die Überprüfung wichtig ist + +Eine digitale Signatur kann **kompromittiert** sein, wenn das zugrunde liegende Zertifikat widerrufen wurde oder das Dokument nach der Signatur manipuliert wurde. Aspose.Pdf stellt uns die praktische Methode `IsSignatureCompromised` zur Verfügung, die einen booleschen Wert zurückgibt – einfach, aber für die meisten Audit‑Pipelines ausreichend leistungsfähig. + +### Code‑Snippet + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Erklärung** + +- `Document` lädt das PDF in den Speicher. +- `PdfFileSignature` umschließt das Dokument und stellt signaturbezogene Methoden bereit. +- `IsSignatureCompromised("Signature1")` prüft die Integrität der Signatur mit dem Namen *Signature1*. +- Das boolesche Ergebnis sagt Ihnen, ob die Signatur noch vertrauenswürdig ist. + +> **Pro Tipp:** Wenn Sie sich nicht sicher über den Namen des Signaturfeldes sind, rufen Sie zuerst `pdfSignature.GetSignatureNames()` auf; es gibt eine Liste aller Signatur‑Bezeichner zurück. + +--- + +## Schritt 3: Optionen für die Bates‑Nummerierung vorbereiten + +### Was ist Bates‑Nummerierung? + +Bates‑Nummern sind fortlaufende Kennungen, die auf jeder Seite eines juristischen oder forensischen Dokuments gedruckt werden. Sie erleichtern das Referenzieren von Seiten während Discovery‑ oder Audit‑Prozessen. Aspose.Pdf’s `BatesNumberingOptions` ermöglicht Ihnen, Präfix, Startnummer, Stellenanzahl, Ausrichtung und Rand – alles in einem Objekt – anzupassen. + +### Code‑Fortsetzung + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Erklärung** + +- `BatesNumberingOptions` zentralisiert alle Formatierungsoptionen. +- `AddBatesNumbering` iteriert automatisch über jede Seite – kein manueller Loop nötig. +- Das `Prefix` (`INV-`) und die `StartNumber` (1000) erzeugen Labels wie `INV-01000`, `INV-01001` usw. +- Passen Sie `BottomMargin` an, wenn Sie die Nummer höher oder tiefer auf der Seite platzieren möchten. + +--- + +## Schritt 4: Komplettes Beispiel ausführen + +Speichern Sie die Datei und führen Sie dann aus: + +```bash +dotnet run +``` + +Sie sollten zwei Konsolenausgaben sehen: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Wenn die erste Zeile `True` ausgibt, ist die Signatur kompromittiert – das bedeutet, das Dokument könnte nach der Signatur verändert worden sein oder das Zertifikat ist nicht mehr gültig. In diesem Fall brechen Sie jegliche nachgelagerte Verarbeitung ab. + +--- + +## Schritt 5: Häufige Randfälle & deren Handhabung + +| Situation | Worauf zu achten ist | Empfohlene Lösung | +|-----------|----------------------|-------------------| +| **Multiple signatures** | `IsSignatureCompromised` prüft nur ein Feld auf einmal. | Durchlaufen Sie `pdfSignature.GetSignatureNames()` und überprüfen Sie jedes. | +| **Custom signature field name** | Die Verwendung von `"Signature1"` kann eine Ausnahme auslösen, wenn der Name abweicht. | Rufen Sie zuerst die Namensliste ab oder übergeben Sie den genauen Namen, den Sie in Acrobat sehen. | +| **Large PDFs (100+ pages)** | Das Hinzufügen von Bates‑Nummern kann speicherintensiv sein. | Verwenden Sie `Document.Save` mit `SaveOptions`, die Streaming aktivieren (`PdfSaveOptions { Compress = true }`). | +| **Non‑Latin characters in prefix** | Einige Schriftarten unterstützen Unicode standardmäßig nicht. | Setzen Sie `pdfWithBates.Font` auf eine Unicode‑kompatible Schriftart wie `Arial Unicode MS`. | +| **Need to place numbers on the left** | Die Ausrichtung ist fest auf `Right` gesetzt. | Ändern Sie `Alignment = HorizontalAlignment.Left` in `BatesNumberingOptions`. | + +--- + +## Schritt 6: Ergebnis manuell überprüfen (optional) + +Öffnen Sie `BatesNumbered.pdf` in einem beliebigen PDF‑Viewer: + +1. Blättern Sie durch die Seiten – jede sollte ein Etikett wie **INV‑01000** in der unteren rechten Ecke anzeigen. +2. Verwenden Sie Acrobats **Signature Panel**, um die Signatur zu doppelklicken und zu bestätigen, dass der Status mit der Konsolenausgabe übereinstimmt. + +Wenn alles übereinstimmt, haben Sie den **check pdf signature**‑Status erfolgreich überprüft und **add bates numbering** in einem Schritt angewendet. + +--- + +## Häufig gestellte Fragen + +**Q: Kann ich eine Signatur überprüfen, ohne das gesamte Dokument zu laden?** +A: Aspose.Pdf streamt die Datei intern, aber Sie benötigen dennoch eine `Document`‑Instanz. Bei sehr großen Dateien sollten Sie `PdfFileSignature` direkt mit einem Dateistream verwenden, um den Speicherverbrauch zu reduzieren. + +**Q: Benötige ich eine Lizenz für Aspose.Pdf?** +A: Eine kostenlose Evaluation funktioniert, fügt jedoch ein Wasserzeichen hinzu. Für die Produktion sollten Sie eine gültige Lizenz erwerben; sonst tragen die Ausgabedateien das Aspose‑Banner. + +**Q: Was, wenn ich Bates‑Nummern nur auf einen Teil der Seiten anwenden möchte?** +A: Verwenden Sie `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })`, wobei das Array die zu nummerierenden Seiten angibt. + +--- + +## Fazit + +Sie wissen jetzt, **wie man PDF‑Signatur überprüft** mit Aspose.Pdf, verstehen die Bedeutung des booleschen Ergebnisses und können **Bates‑Nummerierung** selbstbewusst zu jeder PDF hinzufügen, die Sie kontrollieren. Das vollständige, ausführbare Beispiel kombiniert beide Aufgaben und liefert Ihnen ein einzelnes Konsolentool, das die Authentizität eines Dokuments prüft und es mit audit‑bereiten Kennungen versieht. + +Als Nächstes könnten Sie **wie man Signatur gegen einen vertrauenswürdigen Root‑Store überprüft** erkunden oder mit benutzerdefinierten **add bates numbering**‑Stilen wie diagonalen Stempeln oder Abschnitts‑Präfixen experimentieren. Beide Themen bauen auf dem Fundament auf, das Sie gerade gemeistert haben, und machen Ihre Dokumenten‑Verarbeitungspipeline noch robuster. + +Viel Spaß beim Coden, und denken Sie daran – das Prüfen von Signaturen und das Nummerieren von Seiten ist ein Kinderspiel, sobald Sie den richtigen Code haben! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/german/net/printing-rendering/_index.md index 1ae20c30a..cef0c63ce 100644 --- a/pdf/german/net/printing-rendering/_index.md +++ b/pdf/german/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Erfahren Sie, wie Sie mit Aspose.PDF für .NET effizient einzelne Seiten einer P ### [Benutzerdefinierten Zoomfaktor in PDFs mit Aspose.PDF für .NET festlegen – Eine vollständige Anleitung](./aspose-pdf-net-set-zoom-factor-pdfs/) Erfahren Sie, wie Sie mit Aspose.PDF für .NET einen benutzerdefinierten Zoomfaktor in PDF-Dokumenten festlegen. Diese Anleitung behandelt Installation, Implementierungsschritte und praktische Anwendungen. +### [So rendern Sie PDF in C# – Vollständige Anleitung zu PNG, HTML und Stempeln](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Erfahren Sie, wie Sie PDFs in C# in PNG und HTML rendern und dabei Stempel hinzufügen – Schritt‑für‑Schritt‑Anleitung mit Codebeispielen. + ## Weitere Ressourcen - [Aspose.PDF für Net-Dokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/german/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/german/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..3244b6bb2 --- /dev/null +++ b/pdf/german/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-04-02 +description: Wie man PDF mit Aspose.PDF in C# rendert. Lernen Sie, PDF in PNG zu rendern, + PDF als HTML zu speichern und automatisch angepasste Textstempel effizient hinzuzufügen. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: de +og_description: Wie man PDF mit Aspose.PDF in C# rendert. Dieser Leitfaden zeigt das + Rendern von PDF zu PNG, das Speichern als HTML und das Erstellen von automatisch + angepassten Textstempeln. +og_title: PDF in C# rendern – PNG, HTML & Auto‑Fit‑Stempel +tags: +- Aspose.PDF +- C# +- PDF processing +title: Wie man PDF in C# rendert – Vollständiger Leitfaden zu PNG, HTML und Stamping +url: /de/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man PDF in C# rendert – Vollständiger Leitfaden zu PNG, HTML & Stamping + +Haben Sie sich jemals gefragt, **wie man PDF** in einer .NET‑Anwendung rendert, ohne ein einziges Glyph zu verlieren? Vielleicht haben Sie einen schnellen `PdfRenderer` ausprobiert und fehlende Zeichen gesehen, oder Sie benötigen ein scharfes PNG für ein Thumbnail, aber das Ergebnis sieht gezackt aus. Nach meiner Erfahrung macht die richtige Kombination aus Rendering‑Optionen und Schriftarten‑Handling den Unterschied zwischen einer kaputten Vorschau und einem pixelperfekten Bild. + +In diesem Tutorial gehen wir drei praxisnahe Szenarien mit Aspose.PDF für .NET durch: das Rendern einer PDF‑Seite zu PNG bei gleichzeitiger Font‑Analyse, das Hinzufügen eines `TextStamp`, das seine Schriftgröße automatisch anpasst, und das Speichern einer PDF als HTML unter Verwendung der CMap‑Tabelle der Schriftart. Am Ende können Sie **PDF zu PNG rendern**, **PDF‑Seite in PNG konvertieren**, **PDF‑Seite als Bild exportieren** und sogar **PDF als HTML speichern**, ohne Probleme. + +## Voraussetzungen + +- .NET 6.0 oder höher (der Code funktioniert auch mit .NET Framework 4.6+) +- Aspose.PDF für .NET NuGet‑Paket (`Install-Package Aspose.PDF`) +- Eine PDF‑Datei mit komplexen Schriften (z. B. `complexFonts.pdf`) für die Rendering‑Demo +- Grundkenntnisse in C# und Visual Studio (oder einer anderen IDE Ihrer Wahl) + +> **Pro Tip:** Wenn Sie auf einem CI‑Server arbeiten, stellen Sie sicher, dass die Aspose‑Lizenzdatei entweder als Ressource eingebettet oder über eine Umgebungsvariable referenziert wird, um Evaluations‑Wasserzeichen zu vermeiden. + +--- + +## ## Wie man PDF zu PNG rendert mit Font‑Analyse + +### Warum Font‑Analyse? + +Enthält ein PDF benutzerdefinierte oder eingebettete Schriften, kann ein naives Rendering Glyphen verlieren, die der Renderer nicht zuordnen kann. Das Aktivieren von `AnalyzeFonts` zwingt Aspose, die Schriftstrom‑Daten zu prüfen und fehlende Glyphen zu substituieren, wodurch ein getreues Bild entsteht. + +### Schritt‑für‑Schritt‑Implementierung + +1. **Erstellen Sie ein `PngDevice` mit aktivierter `AnalyzeFonts`.** +2. **Laden Sie das Quell‑PDF** mittels `Document`. +3. **Verarbeiten Sie die gewünschte Seite** und schreiben Sie das PNG auf die Festplatte. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**Was Sie sehen sollten:** Eine Datei namens `rendered.png` im Verzeichnis `YOUR_DIRECTORY`, die exakt wie die erste Seite von `complexFonts.pdf` aussieht, inklusive aller Sonderzeichen und Diakritika. + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### Häufige Stolperfallen & wie man sie vermeidet + +- **Fehlende Schriften auf dem Server:** Wenn das PDF Schriften referenziert, die nicht eingebettet sind, legen Sie diese Schriften in den Suchpfad der Anwendung oder aktivieren Sie `FontRepository`, um auf einen benutzerdefinierten Ordner zu verweisen. +- **Große PDFs:** Das Rendern vieler Seiten in einer Schleife kann viel Speicher verbrauchen; entsorgen Sie jede `Document`‑Instanz sofort oder verwenden Sie `using`‑Blöcke wie im Beispiel gezeigt. + +--- + +## ## Hinzufügen eines Auto‑Fit TextStamp (PDF mit dynamischem Text rendern) + +### Wann braucht man einen dynamisch skalierenden Stempel? + +Stellen Sie sich vor, Sie erzeugen Rechnungen und müssen ein „PAID“-Wasserzeichen überlagern, das in jedes von Ihnen gewählte Rechteck passt, unabhängig von der Textlänge. Das manuelle Berechnen der Schriftgröße ist fehleranfällig; Asposes `AutoAdjustFontSizeToFitStampRectangle` übernimmt die schwere Arbeit. + +### Schritt‑für‑Schritt‑Implementierung + +1. **Konfigurieren Sie einen `TextStamp`** mit Auto‑Adjust‑Eigenschaften. +2. **Laden Sie das Ziel‑PDF**, das Sie stempeln möchten. +3. **Fügen Sie den Stempel einer Seite hinzu** und speichern Sie das Ergebnis. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Ergebnis:** `stampAutoFit.pdf` enthält den Text „Important notice“, perfekt an das Rechteck von 300 × 150 pt angepasst, unabhängig von der ursprünglichen Zeichenkettengröße. + +#### Randbedingungen, die zu beachten sind + +- **Sehr lange Zeichenketten:** Überschreitet der Text das Rechteck selbst bei kleinster Schriftgröße, wird Aspose gemäß `WordWrapMode` abschneiden. Sie können die Länge vorher prüfen oder das Rechteck vergrößern. +- **Mehrere Stempel:** Das Wiederverwenden derselben `TextStamp`‑Instanz auf verschiedenen Seiten funktioniert, aber denken Sie daran, dass Positions‑Eigenschaften (`Left`, `Top`) ihre letzten Werte behalten – setzen Sie sie bei Bedarf zurück. + +--- + +## ## PDF als HTML speichern unter Verwendung der CMap‑Tabelle der Schriftart + +### Warum die CMap‑Tabelle nutzen? + +Beim Konvertieren einer PDF zu HTML ist die Erhaltung der Unicode‑Zuordnung entscheidend für durchsuchbaren Text. Die CMap‑basierte Strategie zwingt Aspose, die interne Zeichenkarte der Schriftart zu priorisieren, was häufig zu einer genaueren Textextraktion führt als bei einer generischen Kodierung. + +### Schritt‑für‑Schritt‑Implementierung + +1. **Erstellen Sie `HtmlSaveOptions`** mit der CMap‑basierten Kodierungsregel. +2. **Laden Sie das Quell‑PDF**. +3. **Speichern Sie als HTML** unter Verwendung der konfigurierten Optionen. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**Was Sie erhalten:** Ein Ordner (wenn `SplitIntoPages` true ist) mit `cmapHtml.html` und zugehörigen Ressourcen. Öffnen Sie das HTML im Browser und Sie werden auswählbaren, durchsuchbaren Text bemerken, der dem Original‑PDF fast perfekt entspricht. + +#### Tipps für einen sauberen HTML‑Export + +- **Bilder vs. Vektoren:** Setzen Sie `RasterImagesSavingMode` auf `RasterImagesSavingMode.AsEmbeddedPartsOfPng`, wenn Sie PNGs statt JPEGs für schärfere Grafiken bevorzugen. +- **Große PDFs:** Verwenden Sie `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages`, um jede Seite leichtgewichtig zu halten. + +--- + +## ## Vollständiges Beispiel – Alle drei Szenarien in einem Projekt + +Unten finden Sie eine eigenständige Konsolen‑App, die die drei Techniken nebeneinander demonstriert. Kopieren Sie den Code in ein neues C#‑Konsolenprojekt, fügen Sie das Aspose.PDF‑NuGet‑Paket hinzu und passen Sie die Dateipfade an. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Führen Sie das Programm aus, und Sie finden: + +- `rendered.png` – ein perfektes Bild der ersten PDF‑Seite. +- `stampAutoFit.pdf` – das Original‑PDF mit einem dynamisch skalierten „Important notice“-Stempel. +- `cmapHtml.html` (plus seiten­spezifische HTML‑Dateien) – eine HTML‑Version, die die ursprüngliche Textkodierung bewahrt. + +--- + +## ## Häufig gestellte Fragen (FAQ) + +**F: Erhöht `AnalyzeFonts` die Renderzeit?** +A: Leicht, da Aspose jeden Schriftstrom scannt. Der Aufwand lohnt sich in der Regel bei komplexen PDFs, bei denen fehlende Glyphen inakzeptabel sind. + +**F: Kann ich mehrere Seiten in einer Schleife rendern?** +A: Absolut. Durchlaufen Sie einfach `sourcePdf.Pages` und rufen Sie `pngDevice.Process(page, $"page{page.Number}.png")` auf. Denken Sie daran, jede `Document`‑Instanz zu entsorgen, wenn Sie sie separat öffnen. + +**F: Was, wenn + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 e06963c9c..3d83fd155 100644 --- a/pdf/greek/net/conversion-export/_index.md +++ b/pdf/greek/net/conversion-export/_index.md @@ -159,7 +159,7 @@ Master Aspose.PDF για .NET για απρόσκοπτη μετατροπή δ Μάθετε πώς να μετατρέπετε εικόνες μετααρχείων γραφικών υπολογιστή (CGM) σε μορφή PDF χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο οδηγός καλύπτει τη ρύθμιση, τα βήματα μετατροπής και συμβουλές αντιμετώπισης προβλημάτων. ### [Πώς να μετατρέψετε EPUB σε PDF χρησιμοποιώντας το Aspose.PDF .NET: Οδηγός βήμα προς βήμα](./convert-epub-pdf-aspose-pdf-net-guide/) -Μάθετε πώς να μετατρέπετε αρχεία EPUB σε PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον λεπτομερή οδηγό. Ιδανικό για προγραμματιστές που χρειάζονται απρόσκοπτη μετατροπή εγγράφων. +Μάθετε πώς να μετατρέπετε αρχεία EPUB σε PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον λεπτομερές οδηγό. Ιδανικό για προγραμματιστές που χρειάζονται απρόσκοπτη μετατροπή εγγράφων. ### [Πώς να μετατρέψετε HTML σε PDF με το Aspose.PDF .NET: Ένας πλήρης οδηγός](./convert-html-pdf-aspose-dotnet-guide/) Μάθετε πώς να μετατρέπετε αποτελεσματικά έγγραφα HTML σε PDF επαγγελματικής εμφάνισης χρησιμοποιώντας το Aspose.PDF .NET. Ανακαλύψτε τεχνικές για τον χειρισμό εξωτερικών πόρων και την απόδοση σύνθετου περιεχομένου. @@ -183,16 +183,16 @@ Master Aspose.PDF για .NET για απρόσκοπτη μετατροπή δ Μάθετε πώς να μετατρέψετε ένα έγγραφο PDF σε δυαδική εικόνα TIFF χρησιμοποιώντας το Aspose.PDF για .NET. Αυτό το σεμινάριο καλύπτει την εγκατάσταση, τη διαμόρφωση και τις πρακτικές εφαρμογές. ### [Πώς να μετατρέψετε PDF σε EPUB με το Aspose.PDF για .NET: Οδηγός προγραμματιστή](./convert-pdf-to-epub-aspose-dotnet/) -Μάθετε πώς να μετατρέπετε αρχεία PDF σε μορφή EPUB χρησιμοποιώντας το Aspose.PDF για .NET. Ακολουθήστε αυτόν τον αναλυτικό οδηγό για να βελτιώσετε την ψηφιακή δημοσίευση και την προσβασιμότητα περιεχομένου. +Μάθετε πώς να μετατρέψετε αρχεία PDF σε μορφή EPUB χρησιμοποιώντας το Aspose.PDF για .NET. Ακολουθήστε αυτόν τον αναλυτικό οδηγό για να βελτιώσετε την ψηφιακή δημοσίευση και την προσβασιμότητα περιεχομένου. ### [Πώς να μετατρέψετε PDF σε TIFF πολλαπλών σελίδων χρησιμοποιώντας το Aspose.PDF .NET - Οδηγός βήμα προς βήμα](./convert-pdf-to-multi-page-tiff-aspose-dotnet/) -Μάθετε πώς να μετατρέπετε αρχεία PDF σε εικόνες TIFF πολλαπλών σελίδων υψηλής ποιότητας χρησιμοποιώντας το Aspose.PDF για .NET. Ακολουθήστε αυτόν τον οδηγό βήμα προς βήμα για εύκολη εφαρμογή σε C#. +Μάθετε πώς να μετατρέψετε αρχεία PDF σε εικόνες TIFF πολλαπλών σελίδων υψηλής ποιότητας χρησιμοποιώντας το Aspose.PDF για .NET. Ακολουθήστε αυτόν τον οδηγό βήμα προς βήμα για εύκολη εφαρμογή σε C#. ### [Πώς να μετατρέψετε PDF σε PostScript σε C# χρησιμοποιώντας το Aspose.PDF: Ένας πλήρης οδηγός](./convert-pdf-to-postscript-aspose-csharp/) -Μάθετε πώς να μετατρέπετε αρχεία PDF σε μορφή PostScript χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον οδηγό βήμα προς βήμα. Ιδανικό για ανάγκες εκτύπωσης υψηλής ποιότητας. +Μάθετε πώς να μετατρέψετε αρχεία PDF σε μορφή PostScript χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον οδηγό βήμα προς βήμα. Ιδανικό για ανάγκες εκτύπωσης υψηλής ποιότητας. ### [Πώς να μετατρέψετε PDF σε TIFF χρησιμοποιώντας το Aspose.PDF για .NET: Οδηγός βήμα προς βήμα](./convert-pdf-to-tiff-aspose-net/) -Μάθετε πώς να μετατρέπετε αρχεία PDF σε εικόνες TIFF υψηλής ποιότητας χρησιμοποιώντας το Aspose.PDF για .NET. Ακολουθήστε τον αναλυτικό οδηγό μας με παραδείγματα κώδικα και συμβουλές διαμόρφωσης. +Μάθετε πώς να μετατρέψετε αρχεία PDF σε εικόνες TIFF υψηλής ποιότητας χρησιμοποιώντας το Aspose.PDF για .NET. Ακολουθήστε τον αναλυτικό οδηγό μας με παραδείγματα κώδικα και συμβουλές διαμόρφωσης. ### [Πώς να μετατρέψετε PDF σε XML χρησιμοποιώντας το Aspose.PDF για .NET: Οδηγός βήμα προς βήμα](./pdf-to-xml-conversion-aspose-pdf-net/) Κατακτήστε την τέχνη της μετατροπής εγγράφων PDF σε XML με το Aspose.PDF για .NET. Ακολουθήστε αυτόν τον ολοκληρωμένο οδηγό και βελτιώστε τη διαχείριση εγγράφων σας. @@ -224,6 +224,9 @@ Master Aspose.PDF για .NET για απρόσκοπτη μετατροπή δ ### [Μετατροπή PDF σε HTML με το Aspose.PDF για .NET](./pdf-to-html-conversion-aspose-dot-net/) Ένα σεμινάριο κώδικα για το Aspose.PDF Net +### [Μετατροπή PDF σε HTML και Επαλήθευση Υπογραφής PDF – Πλήρης Οδηγός Aspose .NET](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Μάθετε πώς να μετατρέψετε PDF σε HTML και να επαληθεύσετε την υπογραφή PDF με το Aspose.PDF για .NET. + ### [Μετατροπή PDF σε TIFF σε .NET χρησιμοποιώντας το Aspose.PDF: Οδηγός βήμα προς βήμα](./pdf-to-tiff-conversion-aspose-pdf-net/) Μάθετε πώς να μετατρέπετε έγγραφα PDF σε εικόνες TIFF χρησιμοποιώντας το Aspose.PDF για .NET. Κατακτήστε τα προσαρμοσμένα βάθη χρωμάτων και τις προηγμένες τεχνικές επεξεργασίας εικόνας. diff --git a/pdf/greek/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/greek/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..e34a1ddd4 --- /dev/null +++ b/pdf/greek/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,260 @@ +--- +category: general +date: 2026-04-02 +description: Μετατρέψτε το PDF σε HTML διατηρώντας τα διανύσματα, στη συνέχεια επαληθεύστε + την υπογραφή PDF χρησιμοποιώντας το Aspose PDF. Μάθετε τη μετατροπή PDF με το Aspose + και ελέγξτε την ψηφιακή υπογραφή PDF σε C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: el +og_description: Μετατρέψτε PDF σε HTML διατηρώντας τα διανύσματα και επαληθεύστε την + υπογραφή PDF με το Aspose PDF. Βήμα‑βήμα κώδικας C#, συμβουλές και διαχείριση ειδικών + περιπτώσεων. +og_title: Μετατροπή PDF σε HTML & Επαλήθευση Υπογραφής PDF – Πλήρης Εκπαιδευτικό Σεμινάριο + Aspose .NET +tags: +- Aspose.PDF +- C# +- PDF processing +title: Μετατροπή PDF σε HTML και Επαλήθευση Υπογραφής PDF – Πλήρης Οδηγός Aspose .NET +url: /el/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Μετατροπή PDF σε HTML και Επαλήθευση Υπογραφής PDF – Πλήρης Εκπαίδευση Aspose .NET + +Έχετε ποτέ χρειαστεί να **μετατρέψετε PDF σε HTML** αλλά να ανησυχείτε για την απώλεια της ποιότητας των διανυσματικών γραφικών ή για την καταστροφή των ψηφιακών υπογραφών; Δεν είστε μόνοι. Πολλοί προγραμματιστές συναντούν πρόβλημα όταν ένα PDF περιέχει μόνο διανυσματικά γραφικά ή μια ψηφιακή υπογραφή βασισμένη σε SHA‑3 — οι τυπικοί μετατροπείς είτε ραστεροποιούν τα πάντα είτε αγνοούν εντελώς την υπογραφή. + +Σε αυτόν τον οδηγό θα περάσουμε βήμα‑βήμα από μια πρακτική λύση χρησιμοποιώντας **Aspose.Pdf** για .NET: πρώτα θα αφαιρέσουμε τις ραστερ εικόνες ενώ θα μετατρέπουμε ένα PDF μόνο με διανύσματα σε καθαρό HTML, μετά θα σας δείξουμε πώς να **επαληθεύσετε την υπογραφή PDF** (ναι, αυτή με SHA‑3‑256) και να εμφανίσετε το αποτέλεσμα στην κονσόλα. Στο τέλος θα έχετε ένα έτοιμο προς εκτέλεση πρόγραμμα C# που κάνει και τις δύο εργασίες, μαζί με μια σειρά συμβουλών για να αποφύγετε κοινές παγίδες. + +## Τι Θα Χρειαστείτε + +- **Aspose.Pdf for .NET** (η τελευταία έκδοση μέχρι 2026‑04, π.χ., 23.12). +- Ένα περιβάλλον ανάπτυξης .NET (Visual Studio 2022 ή VS Code με την επέκταση C#). +- Δύο δείγματα PDF: + 1. `vectorOnly.pdf` – περιέχει μόνο διανύσματα και κείμενο, χωρίς ραστερ εικόνες. + 2. `signed_sha3.pdf` – ψηφιακά υπογεγραμμένο με κατακερματισμό SHA‑3‑256. + +Δεν απαιτούνται επιπλέον πακέτα NuGet εκτός από το `Aspose.Pdf`. + +--- + +## Βήμα 1: Ρύθμιση του Έργου και Φόρτωση των PDF + +Δημιουργήστε μια νέα εφαρμογή console, προσθέστε το NuGet Aspose.Pdf και φέρτε τα namespaces στο scope. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Γιατί είναι σημαντικό*: Η προφόρτωση των εγγράφων μας επιτρέπει να επαναχρησιμοποιήσουμε τα αντικείμενα τόσο για τη μετατροπή όσο και για την επαλήθευση της υπογραφής, διατηρώντας τη χρήση μνήμης χαμηλή. + +--- + +## Βήμα 2: Μετατροπή PDF σε HTML ενώ Παραλείπουμε τις Ραστερ Εικόνες + +Το `HtmlSaveOptions` του Aspose.Pdf σας δίνει λεπτομερή έλεγχο του τρόπου διαχείρισης των εικόνων. Ορίζοντας το `RasterImagesSavingMode` σε `Skip` λέτε στη βιβλιοθήκη να αγνοεί εντελώς τις ραστερ εικόνες — ιδανικό για πηγή μόνο με διανύσματα. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Αναμενόμενο αποτέλεσμα**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Συμβουλή*: Αν αργότερα χρειαστεί να ενσωματώσετε το HTML σε μια ιστοσελίδα, το παραγόμενο αρχείο περιέχει μόνο SVG και CSS — χωρίς βαριές PNG/JPEG «μπλόμπες». + +--- + +## Βήμα 3: Προετοιμασία του Διαχειριστή Υπογραφής + +Η κλάση `PdfFileSignature` του Aspose.Pdf είναι το σημείο εισόδου για οποιαδήποτε εργασία με ψηφιακές υπογραφές. Διαβάζει το λεξικό υπογραφής, εξάγει το όνομα και σας επιτρέπει να επαληθεύσετε χρησιμοποιώντας έναν συγκεκριμένο αλγόριθμο κατακερματισμού. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Γιατί είναι κρίσιμο αυτό το βήμα*: Χωρίς τον διαχειριστή δεν μπορείτε να απαριθμήσετε υπογραφές ή να επιλέξετε τον αλγόριθμο κατακερματισμού που χρειάζεστε (π.χ., SHA‑3‑256). + +--- + +## Βήμα 4: Καταμέτρηση και Επαλήθευση Κάθε Υπογραφής Χρησιμοποιώντας SHA‑3‑256 + +Η μέθοδος `GetSignNames()` επιστρέφει κάθε ετικέτα υπογραφής στο PDF. Περάστε τις σε βρόχο, καλέστε `VerifySignature` με `DigestHashAlgorithm.Sha3_256` και εκτυπώστε το αποτέλεσμα. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Δειγματικό αποτέλεσμα στην κονσόλα**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Ακραία περίπτωση*: Αν μια υπογραφή χρησιμοποιεί διαφορετικό κατακερματισμό (π.χ., SHA‑256) η επαλήθευση θα επιστρέψει `False`. Μπορείτε να προσθέσετε έλεγχο fallback δοκιμάζοντας άλλες τιμές του `DigestHashAlgorithm` μέσα στο βρόχο. + +--- + +## Βήμα 5: Πλήρες Παράδειγμα Λειτουργίας (Όλος ο Κώδικας σε Ένα Σημείο) + +Παρακάτω είναι το πλήρες πρόγραμμα που μπορείτε να αντιγράψετε‑και‑επικολλήσετε στο `Program.cs`. Αντικαταστήστε το `YOUR_DIRECTORY` με το πραγματικό φάκελο όπου βρίσκονται τα PDF σας. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Εκτελέστε το πρόγραμμα (`dotnet run` ή πατήστε **F5** στο Visual Studio). Θα πρέπει να δείτε την επιβεβαίωση της μετατροπής ακολουθούμενη από τα αποτελέσματα επαλήθευσης της υπογραφής. + +--- + +## Συχνές Ερωτήσεις & Πώς να τις Αντιμετωπίσετε + +| Ερώτηση | Απάντηση | +|----------|--------| +| **Θα περιέχει το HTML ακόμα τις αρχικές γραμματοσειρές;** | Το Aspose.Pdf ενσωματώνει τις χρησιμοποιημένες γραμματοσειρές ως base‑64 data URIs από προεπιλογή, έτσι το αποτέλεσμα εμφανίζεται σωστά ακόμη και αν η μηχανή δεν διαθέτει αυτές τις γραμματοσειρές. | +| **Τι γίνεται αν το PDF μου έχει τόσο διανύσματα *όσο* και εικόνες;** | Διατηρήστε `RasterImagesSavingMode = Skip` για να αφαιρέσετε τις εικόνες, ή αλλάξτε σε `EmbedAll` αν τις χρειάζεστε. Η επιλογή είναι ανά μετατροπή, οπότε μπορείτε να τρέξετε δύο περάσματα αν χρειάζεστε και τις δύο εκδόσεις. | +| **Η υπογραφή μου χρησιμοποιεί SHA‑512 — πώς την επαληθεύω;** | Αντικαταστήστε το `DigestHashAlgorithm.Sha3_256` με `DigestHashAlgorithm.Sha512`. Μπορείτε ακόμη να ανιχνεύσετε τον αλγόριθμο από το λεξικό υπογραφής και να επιλέξετε δυναμικά. | +| **Υπάρχει τρόπος να λάβω τα στοιχεία του πιστοποιητικού του υπογράφοντα;** | Ναι. Μετά την επαλήθευση, καλέστε `signatureHandler.GetSignatureInfo(signName).Certificate` για να ανακτήσετε το πιστοποιητικό X.509 και να εξετάσετε πεδία όπως `Subject` και `Issuer`. | +| **Τι γίνεται αν το PDF είναι προστατευμένο με κωδικό;** | Φορτώστε το με `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. Το υπόλοιπο workflow παραμένει το ίδιο. | + +--- + +## Συμβουλές για Παραγωγικό Κώδικα + +1. **Dispose PDFs Properly** – Τυλίξτε τις παρουσίες `PdfDocument` σε μπλοκ `using` ή καλέστε `Dispose()` για να ελευθερώσετε τους εγγενείς πόρους. +2. **Batch Processing** – Αν έχετε δεκάδες PDF, επαναλάβετε πάνω σε έναν φάκελο, αποθηκεύστε τα αποτελέσματα σε CSV και παραλληλοποιήστε τη μετατροπή με `Parallel.ForEach`. +3. **Logging** – Αντικαταστήστε το `Console.WriteLine` με έναν δομημένο logger (Serilog, NLog) για καλύτερη ανιχνευσιμότητα, ειδικά όταν επαληθεύετε πολλές υπογραφές. +4. **Error Handling** – Πιάστε `Aspose.Pdf.Exceptions` για να διαχειριστείτε κατεστραμμένα αρχεία με χάρη: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Version Compatibility** – Το Aspose.Pdf εξελίσσεται γρήγορα. Πάντα δοκιμάζετε με την ακριβή έκδοση που αναφέρεται στο `csproj`. Το API που παρουσιάζεται λειτουργεί για 23.x και νεότερες εκδόσεις. + +--- + +## Συμπέρασμα + +Μόλις **μετατρέψαμε PDF σε HTML** διατηρώντας μόνο διανύσματα και κείμενο, και **επαληθεύσαμε την υπογραφή PDF** χρησιμοποιώντας τον αλγόριθμο SHA‑3‑256 — όλα με λίγες γραμμές C#. Τα κύρια συμπεράσματα είναι: + +- Χρησιμοποιήστε `HtmlSaveOptions.RasterImagesSavingMode = Skip` για καθαρό HTML μόνο με διανύσματα. +- Εκμεταλλευτείτε το `PdfFileSignature` και το `DigestHashAlgorithm.Sha3_256` για αξιόπιστο **έλεγχο ψηφιακής υπογραφής PDF**. + +Από εδώ μπορείτε να εξερευνήσετε συναφή θέματα όπως **aspose pdf conversion** PDF σε PNG, εξαγωγή ενσωματωμένων αρχείων, ή δημιουργία web service που δέχεται PDF και επιστρέφει επαληθευμένα αποσπάσματα HTML. + +Δοκιμάστε το, προσαρμόστε τις επιλογές, και ενημερώστε μας για τα αποτελέσματα. Καλό coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/greek/net/digital-signatures/_index.md b/pdf/greek/net/digital-signatures/_index.md index e08abd976..3a06e497b 100644 --- a/pdf/greek/net/digital-signatures/_index.md +++ b/pdf/greek/net/digital-signatures/_index.md @@ -36,7 +36,7 @@ Μάθετε πώς να εξάγετε πληροφορίες ψηφιακής υπογραφής από PDF χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο οδηγός βήμα προς βήμα καλύπτει την εγκατάσταση, την υλοποίηση και τις πρακτικές εφαρμογές. ### [Πώς να εφαρμόσετε ψηφιακές υπογραφές σε .NET με το Aspose.PDF: Ένας πλήρης οδηγός](./implement-pdf-signatures-dotnet-aspose-pdf-guide/) -Μάθετε πώς να εφαρμόζετε ασφαλείς ψηφιακές υπογραφές σε PDF χρησιμοποιώντας το Aspose.PDF για .NET, συμπεριλαμβανομένης της απόκρυψης προαιρετικών πεδίων. +Μάθετε πώς να εφαρμόζετε ασφαλείς ψηφιακές υπογραφές σε PDF χρησιμοποιώντας το Aspose.PDF για .NET, συμπεριανομένης της απόκρυψης προαιρετικών πεδίων. ### [Πώς να αφαιρέσετε ψηφιακές υπογραφές PDF χρησιμοποιώντας το Aspose.PDF .NET | Πλήρης οδηγός](./remove-pdf-digital-signatures-aspose-pdf-net/) Μάθετε πώς να αφαιρείτε αποτελεσματικά τις ψηφιακές υπογραφές από PDF χρησιμοποιώντας το Aspose.PDF .NET. Αυτός ο ολοκληρωμένος οδηγός καλύπτει την αφαίρεση μίας και πολλαπλών υπογραφών, με οδηγίες βήμα προς βήμα. @@ -59,6 +59,12 @@ ### [Επικύρωση υπογραφής PDF με το Aspose – Μετατροπή PDF σε HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Μάθετε πώς να επικυρώνετε υπογραφές PDF και να μετατρέπετε PDF σε HTML με το Aspose.PDF για .NET. +### [Επαλήθευση υπογραφής PDF και προσθήκη αριθμού Bates – Πλήρης οδηγός C#](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Μάθετε πώς να επαληθεύετε υπογραφές PDF και να προσθέτετε αριθμό Bates χρησιμοποιώντας το Aspose.PDF σε C#. + +### [Πώς να εξάγετε υπογραφές από PDF – Οδηγός Aspose C#](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Μάθετε πώς να εξάγετε υπογραφές από αρχεία PDF με το Aspose.PDF για .NET χρησιμοποιώντας C#. + ## Πρόσθετοι Πόροι - [Aspose.PDF για τεκμηρίωση δικτύου](https://docs.aspose.com/pdf/net/) diff --git a/pdf/greek/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/greek/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..23ebc2d1c --- /dev/null +++ b/pdf/greek/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-02 +description: Μάθετε πώς να εξάγετε υπογραφές, να προσθέτετε πεδίο, να προσθέτετε κενή + σελίδα PDF, πώς να προσθέτετε widget και να διατηρείτε τη διαφάνεια του PDF χρησιμοποιώντας + το Aspose.Pdf σε C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: el +og_description: Πώς να εξάγετε υπογραφές από ένα PDF και να εκτελέσετε σχετικές εργασίες + όπως η προσθήκη πεδίων, κενών σελίδων, widgets και η διατήρηση της διαφάνειας χρησιμοποιώντας + το Aspose.Pdf. +og_title: Πώς να εξάγετε υπογραφές από PDF – Οδηγός Aspose C# +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Πώς να εξάγετε υπογραφές από PDF – Οδηγός Aspose C# +url: /el/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να Εξάγετε Υπογραφές από PDF – Οδηγός Aspose C# + +**Πώς να εξάγετε υπογραφές από ένα PDF** είναι μια συχνή απαίτηση όταν αυτοματοποιείτε την επεξεργασία συμβάσεων, την έγκριση τιμολογίων ή οποιαδήποτε ροή εργασίας που βασίζεται σε ψηφιακές υπογραφές. +Σε αυτόν τον οδηγό θα δούμε επίσης **πώς να προσθέσετε πεδίο**, **πώς να προσθέσετε κενή σελίδα PDF**, **πώς να προσθέσετε widget** και **πώς να διατηρήσετε τη διαφάνεια PDF** χρησιμοποιώντας τη βιβλιοθήκη Aspose.Pdf για .NET. + +Φανταστείτε ότι λαμβάνετε δεκάδες υπογεγραμμένα PDF κάθε βράδυ· το να ανοίγετε χειροκίνητα κάθε αρχείο για να επαληθεύετε τις υπογραφές θα ήταν εφιάλτης. Με λίγες γραμμές κώδικα C# μπορείτε προγραμματιστικά να εξάγετε τα ονόματα των υπογραφών, να διατηρήσετε τα αρχικά γραφικά ανέπαφα και ακόμη να εμπλουτίσετε το έγγραφο με νέα πεδία φόρμας—όλα χωρίς να διασπώσετε τη διαφάνεια ή τα χρωματικά προφίλ. + +> **Τι θα πάρετε:** ένα πλήρες, εκτελέσιμο παράδειγμα που μετατρέπει ένα PDF σε PDF/X‑4 (διατηρώντας τη διαφάνεια), εξάγει κάθε ενσωματωμένο όνομα υπογραφής, προσθέτει μια κενή σελίδα και δημιουργεί ένα πεδίο κειμένου φόρμας που εμφανίζεται σε δύο σημεία στην ίδια σελίδα. + +## Προαπαιτούμενα + +- .NET 6.0 ή νεότερο (ο κώδικας λειτουργεί επίσης με .NET Framework) +- Aspose.Pdf for .NET **v25.2** ή νεότερο (απαιτείται για `GetSignatureNames()`) +- Ένα έργο Visual Studio ή οποιοδήποτε IDE C# +- Τρία δείγμα PDF σε φάκελο που ελέγχετε: + - `source.pdf` – οποιοδήποτε PDF θέλετε να μετατρέψετε διατηρώντας τη διαφάνεια + - `signed.pdf` – ένα PDF που ήδη περιέχει ψηφιακές υπογραφές + - (προαιρετικά) ένας κενός φάκελος για τα αρχεία εξόδου + +> **Pro tip:** Αν δεν έχετε ακόμη άδεια, μπορείτε να ζητήσετε μια δωρεάν προσωρινή άδεια από την ιστοσελίδα της Aspose. Η δωρεάν λειτουργία λειτουργεί για δοκιμές αλλά προσθέτει υδατογράφημα. + +## Βήμα 1 – Διατήρηση Διαφάνειας PDF Μετατρέποντας σε PDF/X‑4 + +Η διαφάνεια και τα ενσωματωμένα χρωματικά προφίλ συχνά χάνονται όταν «ισοπεδώνετε» ένα PDF. Η μετατροπή σε **PDF/X‑4** διατηρεί αυτά τα οπτικά στοιχεία ανέπαφα, κάτι που είναι κρίσιμο για έγγραφα έτοιμα για εκτύπωση. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Γιατί είναι σημαντικό:** +Το PDF/X‑4 είναι το πρότυπο ISO για PDF ανταλλαγής γραφικών που διατηρούν ενεργή διαφάνεια. Χρησιμοποιώντας το `PdfFormatConversionOptions`, αποφεύγετε το κοινό λάθος του ραστερισμού διαφανών αντικειμένων, το οποίο μπορεί να αυξήσει δραματικά το μέγεθος του αρχείου και να υποβαθμίσει την ποιότητα. + +## Βήμα 2 – Πώς να Εξάγετε Υπογραφές από PDF + +Η Aspose εισήγαγε τη μέθοδο `GetSignatureNames()` στην έκδοση 25.2, καθιστώντας την εξαγωγή υπογραφών μια μιά γραμμή κώδικα. Η μέθοδος επιστρέφει έναν πίνακα με τα λογικά ονόματα που έχουν ανατεθεί σε κάθε πεδίο ψηφιακής υπογραφής. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**Τι να περιμένετε:** Αν το `signed.pdf` περιέχει δύο υπογραφές με ονόματα *ManagerSig* και *ClientSig*, η κονσόλα θα εμφανίσει: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Διαχείριση ειδικών περιπτώσεων:** +- Αν το PDF δεν έχει υπογραφές, το `GetSignatureNames()` επιστρέφει έναν κενό πίνακα – δεν ρίχνεται εξαίρεση. +- Για PDF με κατεστραμμένα πεδία υπογραφής, μπορείτε να τυλίξετε την κλήση σε `try/catch` και να καταγράψετε το σφάλμα χωρίς να διακόψετε όλη τη διαδικασία. + +## Βήμα 3 – Προσθήκη Κενής Σελίδας PDF και Δημιουργία TextBox με Πολλαπλά Widgets + +Η προσθήκη νέας σελίδας είναι απλή, αλλά **πώς να προσθέσετε πεδίο** και **πώς να προσθέσετε widget** μαζί απαιτεί λίγη λεπτομέρεια. Ένα *widget* είναι η οπτική αναπαράσταση ενός πεδίου φόρμας· μπορείτε να συνδέσετε πολλά widgets στο ίδιο λογικό πεδίο, επιτρέποντας στα ίδια δεδομένα να εμφανίζονται σε πολλαπλές θέσεις. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Γιατί να χρησιμοποιήσετε πολλαπλά widgets;** +Ας υποθέσουμε ότι χρειάζεται το ίδιο σχόλιο να εμφανίζεται τόσο στην μπροστινή όσο και στην πίσω πλευρά μιας σύμβασης. Συνδέοντας δύο widgets στο ίδιο πεδίο, κάθε αλλαγή που κάνει ο χρήστης σε μία θέση ενημερώνει αυτόματα και την άλλη. + +**Συνηθισμένα λάθη:** +- Η παράλειψη προσθήκης του πεδίου στο `newDoc.Form` κάνει το widget αόρατο στους προβολείς PDF. +- Η χρήση ταυτοτικών συντεταγμένων rectangle για τα δύο widgets τα τοποθετεί το ένα πάνω στο άλλο—βεβαιωθείτε ότι οι τιμές `Rectangle` διαφέρουν. + +## Βήμα 4 – Όλα Μαζί: Ένα Πλήρες, Εκτελέσιμο Παράδειγμα + +Παρακάτω υπάρχει ένα ενιαίο πρόγραμμα που εκτελεί κάθε βήμα με τη σειρά που παρουσιάστηκε. Αντιγράψτε‑και‑επικολλήστε το σε ένα νέο έργο κονσόλας, προσαρμόστε τις διαδρομές και τρέξτε το. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Αναμενόμενη Εξαγωγή + +Όταν εκτελέσετε το πρόγραμμα, θα δείτε κάτι σαν: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Ανοίξτε το `TextBoxMultipleWidgets.pdf` στο Adobe Acrobat Reader· θα παρατηρήσετε δύο ταυτόσημα πλαίσια κειμένου με ετικέτα **Comments**—ένα κοντά στην κορυφή, ένα λίγο πιο χαμηλά. Η πληκτρολόγηση σε ένα ενημερώνει αμέσως και το άλλο. + +## Συχνές Ερωτήσεις (FAQ) + +| Ερώτηση | Απάντηση | +|----------|--------| +| **Μπορώ να εξάγω τα πραγματικά bytes της υπογραφής;** | Η `GetSignatureNames()` επιστρέφει μόνο λογικά ονόματα. Για να πάρετε το πιστοποιητικό ή την τιμή της υπογραφής χρειάζεστε αντικείμενα `SignatureField` (`document.Form["fieldName"] as SignatureField`). | +| **Λειτουργεί η μετατροπή PDF/X‑4 σε κρυπτογραφημένα PDF;** | Ναι, εφόσον παρέχετε τον κωδικό πρόσβασης μέσω `Document.Open(file, password)`. | +| **Τι γίνεται αν χρειαστώ περισσότερα από δύο widgets;** | Απλώς καλέστε `textBox.Widgets.Add()` για κάθε επιπλέον `WidgetAnnotation`. | +| **Η κενή σελίδα κληρονομεί το μέγεθος σελίδας από το αρχικό PDF;** | Η νέα σελίδα χρησιμοποιεί το προεπιλεγμένο μέγεθος (A4). Μπορείτε να περάσετε ένα αντικείμενο `Page` με προσαρμοσμένες διαστάσεις αν χρειάζεται. | +| **Είναι ο κώδικας συμβατός με .NET Core;** | Απόλυτα—η Aspose.Pdf είναι cross‑platform. Απλώς αναφέρετε το πακέτο NuGet στο έργο .NET Core. | + +## Συμπέρασμα + +Σε αυτόν τον οδηγό δείξαμε **πώς να εξάγετε υπογραφές από PDF** αρχεία, καλύπτοντας επίσης **πώς να προσθέσετε πεδίο**, **πώς να προσθέσετε κενή σελίδα PDF**, **πώς να προσθέσετε widget** και **πώς να διατηρήσετε τη διαφάνεια PDF** χρησιμοποιώντας το Aspose.Pdf για C#. Τώρα έχετε μια ισχυρή, ολοκληρωμένη λύση που μπορείτε να ενσωματώσετε σε οποιοδήποτε pipeline επεξεργασίας εγγράφων. + +Έτοιμοι για την επόμενη πρόκληση; Δοκιμάστε να συνδυάσετε αυτές τις τεχνικές με το OCR module της Aspose για ανάγνωση κειμένου από σαρωμένα + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/greek/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..ac7dba4e7 --- /dev/null +++ b/pdf/greek/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,224 @@ +--- +category: general +date: 2026-04-02 +description: Επαληθεύστε γρήγορα την υπογραφή PDF και μάθετε πώς να προσθέτετε αρίθμηση + Bates χρησιμοποιώντας το Aspose.Pdf. Περιλαμβάνει κώδικα βήμα‑βήμα και συμβουλές. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: el +og_description: Επαληθεύστε γρήγορα την υπογραφή PDF και μάθετε πώς να προσθέτετε + αρίθμηση Bates χρησιμοποιώντας το Aspose.Pdf. Ακολουθήστε το πλήρες παράδειγμα και + αποφύγετε τα κοινά λάθη. +og_title: Επαλήθευση υπογραφής PDF και προσθήκη αρίθμησης Bates – Πλήρης οδηγός C# +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: Επαλήθευση υπογραφής PDF και προσθήκη αριθμητικής Bates – Πλήρης οδηγός C# +url: /el/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Επαλήθευση Υπογραφής PDF και Προσθήκη Αρίθμησης Bates – Πλήρης Οδηγός C# + +Κάποτε χρειάστηκε να **επαληθεύσετε την υπογραφή PDF** πριν στείλετε ένα συμβόλαιο, αλλά δεν ήξερες ποια κλήση API να χρησιμοποιήσεις; Δεν είσαι μόνος—πολλοί προγραμματιστές συναντούν αυτό το εμπόδιο όταν διαχειρίζονται νομικά δεσμευτικά PDF. Σε αυτό το tutorial θα δούμε ακριβώς πώς να **επαληθεύσετε την υπογραφή PDF** με το Aspose.Pdf και στη συνέχεια θα σας δείξουμε **πώς να προσθέσετε αρίθμηση Bates** ώστε τα αρχεία σας να είναι έτοιμα για έλεγχο. + +Θα αγγίξουμε επίσης **πώς να επαληθεύσετε την υπογραφή** προγραμματιστικά, θα καλύψουμε **πώς να προσθέσετε Bates** σε μία μόνο διεργασία, και θα εξηγήσουμε **τα αποτελέσματα του check pdf signature** ώστε να μπορείτε να εμπιστεύεστε το αποτέλεσμα. Στο τέλος θα έχετε μια εκτελέσιμη εφαρμογή C# console που κάνει και τις δύο εργασίες—χωρίς μυστήριο, μόνο καθαρός κώδικας. + +--- + +## Τι Θα Χρειαστείτε + +- **.NET 6.0** ή νεότερο (το παράδειγμα λειτουργεί επίσης με .NET Framework 4.7+) +- **Aspose.Pdf for .NET** πακέτο NuGet (έκδοση 23.11 ή νεότερη) +- Ένα υπογεγραμμένο αρχείο PDF (`signed.pdf`) που θέλετε να επικυρώσετε +- Ένα απλό PDF (`input.pdf`) που θα λάβει τους αριθμούς Bates + +Αν έχετε όλα αυτά, είστε έτοιμοι. Δεν χρειάζονται επιπλέον SDKs, ούτε κρυφά αρχεία ρυθμίσεων. + +--- + +## Βήμα 1: Ρύθμιση του Έργου + +Ξεκινήστε δημιουργώντας ένα έργο console: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Ανοίξτε το `Program.cs` και διαγράψτε τον προεπιλεγμένο κώδικα. Θα χτίσουμε τα πάντα από την αρχή ώστε να μπορείτε να αντιγράψετε‑επικολλήσετε την τελική έκδοση αργότερα. + +--- + +## Βήμα 2: Επαλήθευση Υπογραφής PDF + +### Γιατί είναι σημαντική η επαλήθευση + +Μια ψηφιακή υπογραφή μπορεί να **συμπιεστεί** εάν το υποκείμενο πιστοποιητικό ανακληθεί ή το έγγραφο τροποποιηθεί μετά την υπογραφή. Το Aspose.Pdf μας παρέχει τη βολική μέθοδο `IsSignatureCompromised` που επιστρέφει boolean—απλό, αλλά αρκετά ισχυρό για τις περισσότερες αλυσίδες ελέγχου. + +### Απόσπασμα κώδικα + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Εξήγηση** + +- `Document` φορτώνει το PDF στη μνήμη. +- `PdfFileSignature` τυλίγει το έγγραφο και εκθέτει μεθόδους σχετικές με υπογραφές. +- `IsSignatureCompromised("Signature1")` ελέγχει την ακεραιότητα της υπογραφής με όνομα *Signature1*. +- Το boolean αποτέλεσμα σας λέει αν η υπογραφή είναι ακόμη αξιόπιστη. + +> **Συμβουλή:** Αν δεν είστε σίγουροι για το όνομα του πεδίου υπογραφής, καλέστε πρώτα `pdfSignature.GetSignatureNames()`· επιστρέφει μια λίστα με όλα τα αναγνωριστικά υπογραφών. + +--- + +## Βήμα 3: Προετοιμασία Επιλογών Αρίθμησης Bates + +### Τι είναι η αρίθμηση Bates; + +Οι αριθμοί Bates είναι διαδοχικοί ταυτοποιητές που τυπώνονται σε κάθε σελίδα ενός νομικού ή εγκληματολογικού εγγράφου. Διευκολύνουν την αναφορά σε σελίδες κατά τη διάρκεια της διαδικασίας ανακάλυψης ή ελέγχου. Το `BatesNumberingOptions` του Aspose.Pdf σας επιτρέπει να προσαρμόσετε πρόθεμα, αριθμό εκκίνησης, αριθμό ψηφίων, στοίχιση και περιθώριο—όλα σε ένα αντικείμενο. + +### Συνέχεια κώδικα + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Εξήγηση** + +- `BatesNumberingOptions` συγκεντρώνει όλες τις επιλογές μορφοποίησης. +- `AddBatesNumbering` διασχίζει αυτόματα κάθε σελίδα—χωρίς να χρειάζεται χειροκίνητος βρόχος. +- Το `Prefix` (`INV-`) και το `StartNumber` (1000) παράγουν ετικέτες όπως `INV-01000`, `INV-01001`, κ.λπ. +- Προσαρμόστε το `BottomMargin` αν χρειάζεστε τον αριθμό πιο ψηλά ή πιο χαμηλά στη σελίδα. + +--- + +## Βήμα 4: Εκτέλεση του Πλήρους Παραδείγματος + +Αποθηκεύστε το αρχείο, έπειτα εκτελέστε: + +```bash +dotnet run +``` + +Θα πρέπει να δείτε δύο γραμμές στην κονσόλα: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Αν η πρώτη γραμμή εμφανίζει `True`, η υπογραφή είναι compromised—δηλαδή το έγγραφο μπορεί να έχει τροποποιηθεί μετά την υπογραφή ή το πιστοποιητικό δεν είναι πλέον έγκυρο. Σε αυτή την περίπτωση, σταματήστε οποιαδήποτε επόμενη επεξεργασία. + +--- + +## Βήμα 5: Συνηθισμένες Ακραίες Περιπτώσεις & Πώς να τις Διαχειριστείτε + +| Κατάσταση | Τι Πρέπει να Προσέξετε | Προτεινόμενη Διόρθωση | +|-----------|------------------------|------------------------| +| **Πολλαπλές υπογραφές** | `IsSignatureCompromised` ελέγχει μόνο ένα πεδίο τη φορά. | Κάντε βρόχο μέσω `pdfSignature.GetSignatureNames()` και επαληθεύστε καθεμία. | +| **Προσαρμοσμένο όνομα πεδίου υπογραφής** | Η χρήση του `"Signature1"` μπορεί να προκαλέσει εξαίρεση αν το όνομα διαφέρει. | Πάρτε πρώτα τη λίστα των ονομάτων ή περάστε το ακριβές όνομα που βλέπετε στο Acrobat. | +| **Μεγάλα PDF (100+ σελίδες)** | Η προσθήκη αριθμών Bates μπορεί να καταναλώσει πολύ μνήμη. | Χρησιμοποιήστε `Document.Save` με `SaveOptions` που ενεργοποιούν streaming (`PdfSaveOptions { Compress = true }`). | +| **Μη‑λατινικοί χαρακτήρες στο πρόθεμα** | Ορισμένες γραμματοσειρές δεν υποστηρίζουν Unicode από προεπιλογή. | Ορίστε `pdfWithBates.Font` σε μια γραμματοσειρά συμβατή με Unicode όπως `Arial Unicode MS`. | +| **Ανάγκη τοποθέτησης αριθμών στα αριστερά** | Η στοίχιση είναι σκληρά κωδικοποιημένη σε `Right`. | Αλλάξτε `Alignment = HorizontalAlignment.Left` στο `BatesNumberingOptions`. | + +--- + +## Βήμα 6: Επαλήθευση του Αποτελέσματος Χειροκίνητα (Προαιρετικό) + +Ανοίξτε το `BatesNumbered.pdf` σε οποιονδήποτε προβολέα PDF: + +1. Περιηγηθείτε στις σελίδες—κάθε μία πρέπει να εμφανίζει μια ετικέτα όπως **INV‑01000** στην κάτω‑δεξιά γωνία. +2. Χρησιμοποιήστε το **Πάνελ Υπογραφών** του Acrobat, κάντε διπλό κλικ στην υπογραφή και επιβεβαιώστε ότι η κατάσταση ταιριάζει με το αποτέλεσμα της κονσόλας. + +Αν όλα ταιριάζουν, έχετε επιτυχώς **check pdf signature** και εφαρμόσει **add bates numbering** σε μία ενέργεια. + +--- + +## Συχνές Ερωτήσεις + +**Ε: Μπορώ να επαληθεύσω μια υπογραφή χωρίς να φορτώσω ολόκληρο το έγγραφο;** +Α: Το Aspose.Pdf κάνει streaming του αρχείου στο παρασκήνιο, αλλά χρειάζεστε ακόμα ένα αντικείμενο `Document`. Για τεράστια αρχεία, σκεφτείτε να χρησιμοποιήσετε απευθείας το `PdfFileSignature` με ροή αρχείου ώστε να μειώσετε το αποτύπωμα μνήμης. + +**Ε: Χρειάζομαι άδεια για το Aspose.Pdf;** +Α: Η δωρεάν αξιολόγηση λειτουργεί, αλλά προσθέτει υδατογράφημα. Για παραγωγή θα χρειαστείτε έγκυρη άδεια· διαφορετικά τα παραγόμενα PDF θα φέρουν το λογότυπο Aspose. + +**Ε: Τι γίνεται αν θέλω να προσθέσω αριθμούς Bates μόνο σε υποσύνολο σελίδων;** +Α: Χρησιμοποιήστε `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` όπου ο πίνακας περιέχει τους αριθμούς σελίδων που θέλετε να αριθμήσετε. + +--- + +## Συμπέρασμα + +Τώρα ξέρετε **πώς να επαληθεύσετε την υπογραφή PDF** με το Aspose.Pdf, κατανοείτε τη σημασία του boolean αποτελέσματος, και μπορείτε με σιγουριά **να προσθέσετε αρίθμηση Bates** σε οποιοδήποτε PDF ελέγχετε. Το πλήρες, εκτελέσιμο παράδειγμα συνδυάζει και τις δύο εργασίες, παρέχοντάς σας ένα μοναδικό εργαλείο console που ελέγχει την αυθεντικότητα ενός εγγράφου και το σφραγίζει με αναγνωριστικά έτοιμα για έλεγχο. + +Στη συνέχεια, μπορείτε να εξερευνήσετε **πώς να επαληθεύσετε την υπογραφή** έναντι ενός αξιόπιστου αποθετηρίου ριζών, ή να πειραματιστείτε με προσαρμοσμένα στυλ **add bates numbering** όπως διαγώνιες σφραγίδες ή προθέματα ανά ενότητα. Και τα δύο θέματα βασίζονται στο θεμέλιο που μόλις κατακτήσατε και θα κάνουν τη ροή επεξεργασίας εγγράφων σας ακόμη πιο ανθεκτική. + +Καλή προγραμματιστική δουλειά, και θυμηθείτε—ο έλεγχος υπογραφών και η αρίθμηση σελίδων γίνονται παιχνιδάκι όταν έχετε τον σωστό κώδικα! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/greek/net/printing-rendering/_index.md index bb79ca3d0..c687e56be 100644 --- a/pdf/greek/net/printing-rendering/_index.md +++ b/pdf/greek/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ ### [Ορισμός προσαρμοσμένου συντελεστή ζουμ σε PDF χρησιμοποιώντας το Aspose.PDF για .NET - Ένας πλήρης οδηγός](./aspose-pdf-net-set-zoom-factor-pdfs/) Μάθετε πώς να ορίσετε έναν προσαρμοσμένο συντελεστή ζουμ σε έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο οδηγός καλύπτει την εγκατάσταση, τα βήματα υλοποίησης και τις πρακτικές εφαρμογές. +### [Πώς να αποδώσετε PDF σε C# – Πλήρης οδηγός για PNG, HTML & Σφραγίδωση](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Μάθετε πώς να μετατρέπετε PDF σε PNG, HTML και να προσθέτετε σφραγίδες χρησιμοποιώντας Aspose.PDF για .NET σε C#. + ## Πρόσθετοι Πόροι - [Aspose.PDF για τεκμηρίωση δικτύου](https://docs.aspose.com/pdf/net/) diff --git a/pdf/greek/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/greek/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..0491ae4aa --- /dev/null +++ b/pdf/greek/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-04-02 +description: Πώς να αποδώσετε PDF χρησιμοποιώντας το Aspose.PDF σε C#. Μάθετε πώς + να αποδίδετε PDF σε PNG, να αποθηκεύετε PDF ως HTML και να προσθέτετε αυτόματα προσαρμοζόμενες + σφραγίδες κειμένου αποδοτικά. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: el +og_description: Πώς να αποδώσετε PDF χρησιμοποιώντας το Aspose.PDF σε C#. Αυτός ο + οδηγός δείχνει την απόδοση PDF σε PNG, την αποθήκευση ως HTML και τη δημιουργία + αυτοπροσαρμοζόμενων σφραγίδων κειμένου. +og_title: Πώς να αποδώσετε PDF σε C# – PNG, HTML & Αυτόματη προσαρμογή σφραγίδων +tags: +- Aspose.PDF +- C# +- PDF processing +title: Πώς να αποδώσετε PDF σε C# – Πλήρης οδηγός για PNG, HTML & σφράγιση +url: /el/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να αποδώσετε PDF σε C# – Πλήρης Οδηγός για PNG, HTML & Σφραγίδωση + +Έχετε αναρωτηθεί ποτέ **πώς να αποδώσετε PDF** σε μια εφαρμογή .NET χωρίς να χάσετε ούτε ένα γλύφη; Ίσως δοκιμάσατε γρήγορα το `PdfRenderer` και παρατηρήσατε ελλείποντες χαρακτήρες, ή χρειάζεστε ένα καθαρό PNG για μικρογραφία αλλά το αποτέλεσμα φαίνεται σκαμπό. Από την εμπειρία μου, ο σωστός συνδυασμός επιλογών απόδοσης και διαχείρισης γραμματοσειρών κάνει τη διαφορά μεταξύ μιας χαλασμένης προεπισκόπησης και μιας εικόνας pixel‑perfect. + +Σε αυτό το tutorial θα περάσουμε από τρία πραγματικά σενάρια με το Aspose.PDF for .NET: απόδοση μιας σελίδας PDF σε PNG με ανάλυση γραμματοσειρών, προσθήκη ενός `TextStamp` που αυτόματα προσαρμόζει το μέγεθος της γραμματοσειράς, και αποθήκευση ενός PDF ως HTML χρησιμοποιώντας τον πίνακα CMap της γραμματοσειράς. Στο τέλος θα μπορείτε να **αποδώσετε PDF σε PNG**, **μετατρέψετε σελίδα PDF σε PNG**, **εξάγετε εικόνα σελίδας PDF**, και ακόμη **αποθηκεύσετε PDF ως HTML** χωρίς προβλήματα. + +## Προαπαιτούμενα + +- .NET 6.0 ή νεότερο (ο κώδικας λειτουργεί επίσης σε .NET Framework 4.6+) +- Πακέτο NuGet Aspose.PDF for .NET (`Install-Package Aspose.PDF`) +- Ένα αρχείο PDF με σύνθετες γραμματοσειρές (π.χ. `complexFonts.pdf`) για τη demo απόδοση +- Βασική εξοικείωση με C# και Visual Studio (ή οποιοδήποτε IDE προτιμάτε) + +> **Pro tip:** Αν τρέχετε σε διακομιστή CI, βεβαιωθείτε ότι το αρχείο άδειας Aspose είναι είτε ενσωματωμένο ως πόρος είτε αναφέρεται μέσω μεταβλητής περιβάλλοντος για να αποφύγετε τα υδατογράμματα αξιολόγησης. + +--- + +## ## Πώς να αποδώσετε PDF σε PNG με Ανάλυση Γραμματοσειρών + +### Γιατί να αναλύσετε τις γραμματοσειρές; + +Όταν ένα PDF περιέχει προσαρμοσμένες ή ενσωματωμένες γραμματοσειρές, μια αφελής απόδοση μπορεί να χάσει γλύφους που ο renderer δεν μπορεί να αντιστοιχίσει. Η ενεργοποίηση του `AnalyzeFonts` αναγκάζει το Aspose να εξετάσει τα ρεύματα γραμματοσειρών και να αντικαταστήσει τους ελλείποντες γλύφους, εξασφαλίζοντας μια πιστή εικόνα. + +### Υλοποίηση βήμα‑βήμα + +1. **Δημιουργήστε ένα `PngDevice` με ενεργοποιημένο το `AnalyzeFonts`.** +2. **Φορτώστε το πηγαίο PDF** χρησιμοποιώντας το `Document`. +3. **Επεξεργαστείτε τη ζητούμενη σελίδα** και γράψτε το PNG στο δίσκο. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**Τι θα δείτε:** Ένα αρχείο με όνομα `rendered.png` στο `YOUR_DIRECTORY` που φαίνεται ακριβώς όπως η πρώτη σελίδα του `complexFonts.pdf`, συμπεριλαμβανομένων όλων των ειδικών χαρακτήρων και διακριτικών. + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### Συνηθισμένα προβλήματα & πώς να τα αποφύγετε + +- **Έλλειψη γραμματοσειρών στον διακομιστή:** Αν το PDF αναφέρει γραμματοσειρές που δεν είναι ενσωματωμένες, τοποθετήστε αυτές τις γραμματοσειρές στη διαδρομή ανίχνευσης της εφαρμογής ή ενεργοποιήστε το `FontRepository` για να δείξει σε προσαρμοσμένο φάκελο. +- **Μεγάλα PDF:** Η απόδοση πολλών σελίδων σε βρόχο μπορεί να καταναλώσει μνήμη· απελευθερώστε άμεσα κάθε αντικείμενο `Document` ή χρησιμοποιήστε μπλοκ `using` όπως φαίνεται. + +--- + +## ## Προσθήκη Auto‑Fit TextStamp (Απόδοση PDF με Δυναμικό Κείμενο) + +### Πότε χρειάζεστε μια σφραγίδα με δυναμικό μέγεθος; + +Φανταστείτε ότι δημιουργείτε τιμολόγια και πρέπει να επικάνετε ένα υδατογράφημα “PAID” που ταιριάζει σε οποιοδήποτε ορθογώνιο επιλέγετε, ανεξάρτητα από το μήκος του κειμένου. Ο υπολογισμός του μεγέθους γραμματοσειράς με το χέρι είναι επιρρεπής σε σφάλματα· το `AutoAdjustFontSizeToFitStampRectangle` του Aspose κάνει το δύσκολο μέρος. + +### Υλοποίηση βήμα‑βήμα + +1. **Διαμορφώστε ένα `TextStamp`** με ιδιότητες αυτόματης προσαρμογής. +2. **Φορτώστε το PDF-στόχο** που θέλετε να σφραγίσετε. +3. **Προσθέστε τη σφραγίδα σε μια σελίδα** και αποθηκεύστε το αποτέλεσμα. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Αποτέλεσμα:** Το `stampAutoFit.pdf` περιέχει το κείμενο “Important notice” τέλεια προσαρμοσμένο στο ορθογώνιο 300 × 150 pt, ανεξάρτητα από το αρχικό μήκος της συμβολοσειράς. + +#### Περιπτώσεις άκρων που πρέπει να ληφθούν υπόψη + +- **Πολύ μεγάλες συμβολοσειρές:** Αν το κείμενο υπερβαίνει το ορθογώνιο ακόμη και στο μικρότερο μέγεθος γραμματοσειράς, το Aspose θα το περικόψει σύμφωνα με το `WordWrapMode`. Μπορείτε να ελέγξετε το μήκος εκ των προτέρων ή να αυξήσετε το μέγεθος του ορθογωνίου. +- **Πολλαπλές σφραγίδες:** Η επαναχρησιμοποίηση του ίδιου αντικειμένου `TextStamp` σε διαφορετικές σελίδες λειτουργεί, αλλά θυμηθείτε ότι οι ιδιότητες θέσης (`Left`, `Top`) διατηρούν τις τελευταίες τιμές· επαναρυθμίστε τις όπως χρειάζεται. + +--- + +## ## Αποθήκευση PDF ως HTML Χρησιμοποιώντας τον Πίνακα CMap της Γραμματοσειράς + +### Γιατί να ασχοληθείτε με τον πίνακα CMap; + +Κατά τη μετατροπή ενός PDF σε HTML, η διατήρηση της αντιστοίχισης Unicode είναι κρίσιμη για κείμενο αναζητήσιμο. Η στρατηγική βασισμένη σε CMap αναγκάζει το Aspose να δώσει προτεραιότητα στον εσωτερικό χάρτη χαρακτήρων της γραμματοσειράς, κάτι που συχνά αποδίδει πιο ακριβή εξαγωγή κειμένου από έναν γενικό κωδικοποιητή. + +### Υλοποίηση βήμα‑βήμα + +1. **Δημιουργήστε `HtmlSaveOptions`** με τον κανόνα κωδικοποίησης βασισμένο σε CMap. +2. **Φορτώστε το πηγαίο PDF**. +3. **Αποθηκεύστε ως HTML** χρησιμοποιώντας τις ρυθμισμένες επιλογές. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**Τι θα πάρετε:** Έναν φάκελο (αν το `SplitIntoPages` είναι true) που περιέχει το `cmapHtml.html` και τους σχετικούς πόρους. Ανοίξτε το HTML σε έναν περιηγητή και θα δείτε επιλέξιμο, αναζητήσιμο κείμενο που ταιριάζει σχεδόν τέλεια με το αρχικό PDF. + +#### Συμβουλές για καθαρή εξαγωγή HTML + +- **Εικόνες vs. διανύσματα:** Ορίστε `RasterImagesSavingMode` σε `RasterImagesSavingMode.AsEmbeddedPartsOfPng` αν προτιμάτε PNG αντί για JPEG για πιο οξυμένες γραφικές παραστάσεις. +- **Μεγάλα PDF:** Χρησιμοποιήστε `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` για να κρατήσετε κάθε σελίδα ελαφριά. + +--- + +## ## Πλήρες Παράδειγμα – Και τα Τρία Σενάρια σε Ένα Έργο + +Παρακάτω υπάρχει μια αυτόνομη εφαρμογή κονσόλας που δείχνει τις τρεις τεχνικές πλάι‑πλάι. Αντιγράψτε‑και‑επικολλήστε την σε ένα νέο έργο C# console, προσθέστε το πακέτο NuGet Aspose.PDF, και προσαρμόστε τις διαδρομές αρχείων. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Τρέξτε το πρόγραμμα και θα βρείτε: + +- `rendered.png` – μια τέλεια εικόνα της πρώτης σελίδας του PDF. +- `stampAutoFit.pdf` – το αρχικό PDF με μια σφραγίδα “Important notice” δυναμικού μεγέθους. +- `cmapHtml.html` (συμπεριλαμβανομένων των αρχείων HTML ανά σελίδα) – μια έκδοση HTML που διατηρεί την αρχική κωδικοποίηση κειμένου. + +--- + +## ## Συχνές Ερωτήσεις (FAQ) + +**Ε: Αυξάνει το `AnalyzeFonts` το χρόνο απόδοσης;** +Α: Λίγο, επειδή το Aspose σαρώνει κάθε ρεύμα γραμματοσειράς. Η ανταλλαγή αξίζει συνήθως για σύνθετα PDF όπου η απώλεια γλύφων είναι απαράδεκτη. + +**Ε: Μπορώ να αποδώσω πολλές σελίδες σε βρόχο;** +Α: Σίγουρα. Απλώς επαναλάβετε πάνω από `sourcePdf.Pages` και καλέστε `pngDevice.Process(page, $"page{page.Number}.png")`. Θυμηθείτε να απελευθερώσετε κάθε `Document` αν τα ανοίγετε ξεχωριστά. + +**Ε: Τι γίνεται αν + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 442c15df8..01c32142f 100644 --- a/pdf/hindi/net/conversion-export/_index.md +++ b/pdf/hindi/net/conversion-export/_index.md @@ -221,6 +221,9 @@ Aspose.PDF .NET का उपयोग करके HTML दस्तावे ### [Aspose.PDF .NET के साथ PDF से HTML रूपांतरण: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) .NET के लिए Aspose.PDF का उपयोग करके PDF-से-HTML रूपांतरण में महारत हासिल करें। अनुकूलन योग्य विकल्पों के साथ दस्तावेज़ की पहुँच और सहभागिता को बढ़ाएँ। +### [PDF को HTML में बदलें और PDF हस्ताक्षर सत्यापित करें – पूर्ण Aspose .NET गाइड](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +PDF को HTML में परिवर्तित करने और PDF हस्ताक्षर की जाँच करने के लिए पूर्ण Aspose .NET गाइड। + ### [.NET के लिए Aspose.PDF के साथ PDF से HTML रूपांतरण](./pdf-to-html-conversion-aspose-dot-net/) Aspose.PDF नेट के लिए एक कोड ट्यूटोरियल diff --git a/pdf/hindi/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/hindi/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..0e185346c --- /dev/null +++ b/pdf/hindi/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,260 @@ +--- +category: general +date: 2026-04-02 +description: PDF को HTML में बदलें जबकि वेक्टर को बनाए रखें, फिर Aspose PDF का उपयोग + करके PDF हस्ताक्षर सत्यापित करें। Aspose PDF रूपांतरण सीखें और C# में PDF डिजिटल + हस्ताक्षर जांचें। +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: hi +og_description: वेक्टर को संरक्षित रखते हुए PDF को HTML में बदलें और Aspose PDF के + साथ PDF हस्ताक्षर की पुष्टि करें। चरण‑दर‑चरण C# कोड, टिप्स, और किनारे‑के‑केस हैंडलिंग। +og_title: PDF को HTML में बदलें और PDF हस्ताक्षर सत्यापित करें – पूर्ण Aspose .NET + ट्यूटोरियल +tags: +- Aspose.PDF +- C# +- PDF processing +title: PDF को HTML में परिवर्तित करें और PDF हस्ताक्षर सत्यापित करें – पूर्ण Aspose + .NET गाइड +url: /hi/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF को HTML में बदलें और PDF सिग्नेचर सत्यापित करें – पूर्ण Aspose .NET ट्यूटोरियल + +क्या आपको कभी **PDF को HTML में बदलने** की ज़रूरत पड़ी है लेकिन आप वेक्टर क्वालिटी खोने या डिजिटल सिग्नेचर टूटने की चिंता में थे? आप अकेले नहीं हैं। कई डेवलपर्स को तब समस्या आती है जब PDF में केवल वेक्टर ग्राफ़िक्स या SHA‑3 आधारित डिजिटल सिग्नेचर होता है—मानक कन्वर्टर्स या तो सब कुछ रास्टराइज़ कर देते हैं या सिग्नेचर को पूरी तरह अनदेखा कर देते हैं। + +इस गाइड में हम **Aspose.Pdf** for .NET का उपयोग करके एक व्यावहारिक समाधान दिखाएंगे: पहले हम रास्टर इमेजेज़ को हटाते हुए वेक्टर‑ओनली PDF को साफ़ HTML में बदलेंगे, फिर हम आपको **PDF सिग्नेचर सत्यापित** करने का तरीका दिखाएंगे (हाँ, SHA‑3‑256 वाला) और परिणाम को कंसोल में प्रदर्शित करेंगे। अंत तक आपके पास एक तैयार‑चलाने योग्य C# प्रोग्राम होगा जो दोनों कार्य करता है, साथ ही कुछ टिप्स भी मिलेंगी जो सामान्य समस्याओं से बचाएंगी। + +## आपको क्या चाहिए + +- **Aspose.Pdf for .NET** (अप्रैल 2026 तक का नवीनतम संस्करण, उदाहरण : 23.12)। +- एक .NET विकास वातावरण (Visual Studio 2022 या C# एक्सटेंशन के साथ VS Code)। +- दो नमूना PDFs: + 1. `vectorOnly.pdf` – केवल वेक्टर और टेक्स्ट है, कोई रास्टर इमेज नहीं। + 2. `signed_sha3.pdf` – SHA‑3‑256 हैश के साथ डिजिटल साइन किया गया। + +`Aspose.Pdf` के अलावा कोई अतिरिक्त NuGet पैकेज आवश्यक नहीं है। + +--- + +## चरण 1: प्रोजेक्ट सेट‑अप करें और PDFs लोड करें + +एक नया कंसोल ऐप बनाएं, Aspose.Pdf NuGet जोड़ें, और नेमस्पेस को स्कोप में लाएँ। + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*यह क्यों महत्वपूर्ण है*: दस्तावेज़ों को पहले लोड करने से हम वही ऑब्जेक्ट दोनों रूपांतरण और सिग्नेचर सत्यापन के लिए पुनः उपयोग कर सकते हैं, जिससे मेमोरी उपयोग कम रहता है। + +--- + +## चरण 2: रास्टर इमेजेज़ को छोड़ते हुए PDF को HTML में बदलें + +Aspose.Pdf का `HtmlSaveOptions` इमेज हैंडलिंग पर सूक्ष्म नियंत्रण देता है। `RasterImagesSavingMode` को `Skip` सेट करने से लाइब्रेरी पूरी तरह रास्टर चित्रों को अनदेखा कर देती है—वेक्टर‑ओनली स्रोत के लिए एकदम सही। + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**अपेक्षित आउटपुट**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*प्रो टिप*: यदि बाद में आपको HTML को वेब पेज में एम्बेड करना है, तो जेनरेटेड फ़ाइल में केवल SVG और CSS होगा—कोई बड़े PNG/JPEG ब्लॉब नहीं। + +--- + +## चरण 3: सिग्नेचर हैंडलर तैयार करें + +Aspose.Pdf का `PdfFileSignature` क्लास किसी भी डिजिटल‑सिग्नेचर कार्य का एंट्री पॉइंट है। यह सिग्नेचर डिक्शनरी पढ़ता है, नाम निकालता है, और आपको विशिष्ट हैश एल्गोरिद्म के साथ सत्यापित करने देता है। + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*यह कदम क्यों आवश्यक है*: हैंडलर के बिना आप सिग्नेचर की सूची नहीं बना सकते या आवश्यक हैश एल्गोरिद्म (जैसे SHA‑3‑256) नहीं चुन सकते। + +--- + +## चरण 4: प्रत्येक सिग्नेचर को SHA‑3‑256 से सूचीबद्ध और सत्यापित करें + +`GetSignNames()` मेथड PDF में मौजूद हर सिग्नेचर लेबल लौटाता है। उनपर लूप चलाएँ, `VerifySignature` को `DigestHashAlgorithm.Sha3_256` के साथ कॉल करें, और परिणाम प्रिंट करें। + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**उदाहरण कंसोल आउटपुट**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*एज केस*: यदि कोई सिग्नेचर अलग हैश (जैसे SHA‑256) उपयोग करता है तो सत्यापन `False` लौटाएगा। आप लूप के भीतर अन्य `DigestHashAlgorithm` मानों को आज़मा कर फॉलबैक चेक जोड़ सकते हैं। + +--- + +## चरण 5: पूर्ण कार्यशील उदाहरण (सभी कोड एक जगह) + +नीचे पूरा प्रोग्राम दिया गया है जिसे आप `Program.cs` में कॉपी‑पेस्ट कर सकते हैं। `YOUR_DIRECTORY` को अपने PDFs वाले वास्तविक फ़ोल्डर से बदलें। + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +प्रोग्राम चलाएँ (`dotnet run` या Visual Studio में **F5** दबाएँ)। आपको पहले रूपांतरण की पुष्टि और फिर सिग्नेचर सत्यापन परिणाम दिखेंगे। + +--- + +## सामान्य प्रश्न और उनके समाधान + +| प्रश्न | उत्तर | +|----------|--------| +| **क्या HTML में मूल फ़ॉन्ट्स भी रहेंगे?** | Aspose.Pdf डिफ़ॉल्ट रूप से उपयोग किए गए फ़ॉन्ट्स को base‑64 डेटा URI के रूप में एम्बेड करता है, इसलिए आउटपुट सही ढंग से रेंडर होता है भले ही होस्ट मशीन पर वे फ़ॉन्ट न हों। | +| **अगर मेरे PDF में वेक्टर *और* इमेज दोनों हों तो?** | इमेज हटाने के लिए `RasterImagesSavingMode = Skip` रखें, या यदि आपको इमेज चाहिए तो `EmbedAll` पर स्विच करें। विकल्प प्रति‑रूपांतरण है, इसलिए आप दो पास चला सकते हैं यदि दोनों संस्करण चाहिए। | +| **मेरी सिग्नेचर SHA‑512 उपयोग करती है—मैं इसे कैसे सत्यापित करूँ?** | `DigestHashAlgorithm.Sha3_256` को `DigestHashAlgorithm.Sha512` से बदलें। आप सिग्नेचर डिक्शनरी से एल्गोरिद्म का पता लगाकर डायनामिक रूप से भी चुन सकते हैं। | +| **क्या सिग्नेचरकर्ता का प्रमाणपत्र विवरण प्राप्त किया जा सकता है?** | हाँ। सत्यापन के बाद `signatureHandler.GetSignatureInfo(signName).Certificate` कॉल करके X.509 प्रमाणपत्र प्राप्त करें और `Subject` व `Issuer` जैसे फ़ील्ड देखें। | +| **अगर PDF पासवर्ड‑प्रोटेक्टेड हो तो?** | इसे इस तरह लोड करें: `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`। बाकी वर्कफ़्लो समान रहता है। | + +--- + +## प्रोडक्शन‑रेडी कोड के लिए प्रो टिप्स + +1. **PDF को सही ढंग से डिस्पोज़ करें** – `PdfDocument` इंस्टेंस को `using` ब्लॉक में रखें या `Dispose()` कॉल करें ताकि नेटिव रिसोर्सेज़ मुक्त हों। +2. **बैच प्रोसेसिंग** – यदि आपके पास दर्जनों PDFs हैं, तो किसी डायरेक्टरी पर इटररेट करें, परिणाम CSV में स्टोर करें, और `Parallel.ForEach` से रूपांतरण को पैरललाइज़ करें। +3. **लॉगिंग** – `Console.WriteLine` को संरचित लॉगर (Serilog, NLog) से बदलें ताकि कई सिग्नेचर सत्यापित करते समय ट्रेसबिलिटी बेहतर हो। +4. **एरर हैंडलिंग** – भ्रष्ट फ़ाइलों को सहजता से संभालने के लिए `Aspose.Pdf.Exceptions` को कैच करें: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **वर्ज़न कम्पैटिबिलिटी** – Aspose.Pdf तेज़ी से विकसित होता है। हमेशा अपने `csproj` में निर्दिष्ट सटीक संस्करण के साथ टेस्ट करें। दिखाया गया API 23.x और बाद के संस्करणों के लिए काम करता है। + +--- + +## निष्कर्ष + +हमने **PDF को HTML में बदला** जबकि केवल वेक्टर और टेक्स्ट को संरक्षित रखा, और **SHA‑3‑256 एल्गोरिद्म** का उपयोग करके PDF सिग्नेचर को सत्यापित किया—सिर्फ कुछ ही C# लाइनों में। मुख्य बिंदु: + +- साफ़ वेक्टर‑ओनली HTML के लिए `HtmlSaveOptions.RasterImagesSavingMode = Skip` उपयोग करें। +- भरोसेमंद PDF डिजिटल सिग्नेचर जांच के लिए `PdfFileSignature` और `DigestHashAlgorithm.Sha3_256` को लेवरेज़ करें। + +अब आप **aspose pdf conversion** से PDF को PNG में बदलना, एम्बेडेड फ़ाइलें निकालना, या एक वेब सर्विस बनाना जो PDFs ले और सत्यापित HTML स्निपेट्स लौटाए, जैसी संबंधित विषयों की खोज कर सकते हैं। + +इसे आज़माएँ, विकल्पों को समायोजित करें, और हमें बताएँ कि आप क्या खोजते हैं। Happy coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hindi/net/digital-signatures/_index.md b/pdf/hindi/net/digital-signatures/_index.md index 85a0f84d5..03162c6d9 100644 --- a/pdf/hindi/net/digital-signatures/_index.md +++ b/pdf/hindi/net/digital-signatures/_index.md @@ -23,6 +23,8 @@ ### [Aspose.PDF के साथ PDF से डिजिटल हस्ताक्षर जानकारी निकालें](./extract-digital-signature-info-from-pdfs-aspose-pdf/) +### [PDF से हस्ताक्षर निकालें – Aspose C# गाइड](./how-to-extract-signatures-from-pdf-aspose-c-guide/) + ### [.NET के लिए Aspose.PDF के साथ PDF हस्ताक्षर भाषा कैसे बदलें](./change-pdf-signature-language-aspose-net/) ### [.NET के लिए Aspose.PDF का उपयोग करके PDF हस्ताक्षर कैसे बनाएं और सत्यापित करें](./create-verify-pdf-signatures-aspose-net/) @@ -53,6 +55,9 @@ C# में PDF दस्तावेज़ लोड करके उसे PD ### [Aspose के साथ PDF हस्ताक्षर सत्यापित करें – PDF को HTML में परिवर्तित करें](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Aspose का उपयोग करके PDF हस्ताक्षर की वैधता जांचें और PDF को HTML में बदलें। +### [PDF हस्ताक्षर सत्यापित करें और Bates नंबरिंग जोड़ें – पूर्ण C# गाइड](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +C# में PDF हस्ताक्षर की जाँच और Bates नंबरिंग जोड़ने की पूरी प्रक्रिया सीखें। + ## अतिरिक्त संसाधन - [Aspose.PDF for Net दस्तावेज़ीकरण](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hindi/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/hindi/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..82d5be6ce --- /dev/null +++ b/pdf/hindi/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,249 @@ +--- +category: general +date: 2026-04-02 +description: Aspose.Pdf का उपयोग करके C# में हस्ताक्षर निकालना, फ़ील्ड जोड़ना, खाली + पेज PDF जोड़ना, विजेट जोड़ना और PDF में पारदर्शिता बनाए रखना सीखें। +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: hi +og_description: Aspose.Pdf का उपयोग करके PDF से हस्ताक्षर निकालने और फ़ील्ड, खाली + पृष्ठ, विजेट जोड़ने तथा पारदर्शिता बनाए रखने जैसे संबंधित कार्य करने का तरीका। +og_title: PDF से हस्ताक्षर निकालने का तरीका – Aspose C# गाइड +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: PDF से हस्ताक्षर निकालने का तरीका – Aspose C# गाइड +url: /hi/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to Extract Signatures from PDF – Aspose C# Guide + +**How to extract signatures from a PDF** एक सामान्य आवश्यकता है जब आप अनुबंध प्रोसेसिंग, इनवॉइस अनुमोदन, या किसी भी कार्यप्रवाह को स्वचालित कर रहे हों जो डिजिटल हस्ताक्षरों पर निर्भर करता है। +इस गाइड में हम **how to add field**, **add blank page PDF**, **how to add widget**, और **preserve transparency PDF** को Aspose.Pdf लाइब्रेरी for .NET का उपयोग करके कैसे किया जाए, यह भी देखेंगे। + +कल्पना कीजिए कि आपको हर रात दर्जनों साइन किए हुए PDFs मिलते हैं; प्रत्येक फ़ाइल को मैन्युअल रूप से खोलकर हस्ताक्षर की जाँच करना एक दुःस्वप्न होगा। कुछ ही पंक्तियों के C# कोड के साथ आप प्रोग्रामेटिकली हस्ताक्षर के नाम निकाल सकते हैं, मूल ग्राफ़िक्स को बरकरार रख सकते हैं, और यहाँ तक कि दस्तावेज़ में नए फ़ॉर्म फ़ील्ड भी जोड़ सकते हैं—बिना मौजूदा ट्रांसपेरेंसी या कलर प्रोफ़ाइल को तोड़े। + +> **What you’ll get:** एक पूर्ण, चलाने योग्य उदाहरण जो PDF को PDF/X‑4 (ट्रांसपेरेंसी बरकरार रखते हुए) में बदलता है, प्रत्येक एम्बेडेड हस्ताक्षर का नाम निकालता है, एक खाली पेज जोड़ता है, और एक टेक्स्टबॉक्स फ़ॉर्म फ़ील्ड बनाता है जो एक ही पेज पर दो स्थानों पर दिखाई देता है। + +## Prerequisites + +- .NET 6.0 या बाद का (कोड .NET Framework के साथ भी काम करता है) +- Aspose.Pdf for .NET **v25.2** या नया ( `GetSignatureNames()` के लिए आवश्यक) +- एक Visual Studio प्रोजेक्ट या कोई भी C# IDE +- आपके नियंत्रण में एक फ़ोल्डर में तीन नमूना PDFs: + - `source.pdf` – कोई भी PDF जिसे आप ट्रांसपेरेंसी बरकरार रखते हुए बदलना चाहते हैं + - `signed.pdf` – एक PDF जिसमें पहले से डिजिटल हस्ताक्षर मौजूद हैं + - (वैकल्पिक) आउटपुट फ़ाइलों के लिए एक खाली फ़ोल्डर + +> **Pro tip:** यदि आपके पास अभी तक लाइसेंस्ड कॉपी नहीं है, तो आप Aspose की वेबसाइट से एक मुफ्त टेम्पररी लाइसेंस का अनुरोध कर सकते हैं। फ्री मोड टेस्टिंग के लिए काम करता है लेकिन वॉटरमार्क जोड़ता है। + +## Step 1 – Preserve Transparency PDF by Converting to PDF/X‑4 + +ट्रांसपेरेंसी और एम्बेडेड कलर प्रोफ़ाइल अक्सर PDF को फ्लैट करने पर खो जाते हैं। **PDF/X‑4** में बदलने से ये विज़ुअल एलिमेंट्स बरकरार रहते हैं, जो प्रिंट‑रेडी दस्तावेज़ों के लिए महत्वपूर्ण है। + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Why this matters:** +PDF/X‑4 ग्राफ़िक‑एक्सचेंज PDFs के लिए ISO मानक है जो लाइव ट्रांसपेरेंसी को रखता है। `PdfFormatConversionOptions` का उपयोग करके आप ट्रांसपेरेंट ऑब्जेक्ट्स को रास्टराइज़ करने की सामान्य समस्या से बचते हैं, जिससे फ़ाइल आकार बहुत बढ़ता है और क्वालिटी घटती है। + +## Step 2 – How to Extract Signatures from a PDF + +Aspose ने संस्करण 25.2 में `GetSignatureNames()` पेश किया, जिससे हस्ताक्षर निकालना एक‑लाइनर बन गया। यह मेथड प्रत्येक डिजिटल सिग्नेचर फ़ील्ड को असाइन किए गए लॉजिकल नामों की एरे लौटाता है। + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**What to expect:** यदि `signed.pdf` में दो हस्ताक्षर हैं जिनके नाम *ManagerSig* और *ClientSig* हैं, तो कंसोल प्रिंट करेगा: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Edge case handling:** +- यदि PDF में कोई हस्ताक्षर नहीं है, तो `GetSignatureNames()` एक खाली एरे लौटाता है – कोई एक्सेप्शन नहीं फेंका जाता। +- यदि PDF में करप्ट सिग्नेचर फ़ील्ड हैं, तो आप कॉल को `try/catch` में रैप करके त्रुटि को लॉग कर सकते हैं बिना पूरे प्रोसेस को रोकें। + +## Step 3 – Add Blank Page PDF and Create a TextBox with Multiple Widgets + +एक नया पेज जोड़ना सीधा है, लेकिन **how to add field** और **how to add widget** को साथ में करना थोड़ा नुकीला हो सकता है। एक *widget* फ़ॉर्म फ़ील्ड का विज़ुअल प्रतिनिधित्व है; आप एक ही लॉजिकल फ़ील्ड से कई widgets जोड़ सकते हैं, जिससे एक ही डेटा कई स्थानों पर दिखे। + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Why use multiple widgets?** +मान लीजिए आपको वही टिप्पणी कॉन्ट्रैक्ट के फ्रंट और बैक दोनों पर दिखानी है। एक ही फ़ील्ड से दो widgets जोड़ने से उपयोगकर्ता द्वारा एक स्थान पर किया गया परिवर्तन दूसरे स्थान पर तुरंत अपडेट हो जाता है। + +**Common pitfalls:** +- `newDoc.Form` में फ़ील्ड जोड़ना न भूलें, नहीं तो widget PDF व्यूअर्स में दिखाई नहीं देगा। +- दोनों widgets के लिए समान `Rectangle` कॉर्डिनेट्स का उपयोग करने से वे एक-दूसरे के ऊपर स्टैक हो जाएंगे—`Rectangle` मान अलग रखें। + +## Step 4 – Putting It All Together: A Full, Runnable Example + +नीचे एक सिंगल प्रोग्राम है जो प्रस्तुत क्रम में हर स्टेप को निष्पादित करता है। इसे एक नए कंसोल प्रोजेक्ट में कॉपी‑पेस्ट करें, पाथ्स को समायोजित करें, और चलाएँ। + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Expected Output + +प्रोग्राम चलाने पर आपको कुछ इस तरह का आउटपुट दिखना चाहिए: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +`TextBoxMultipleWidgets.pdf` को Adobe Acrobat Reader में खोलें; आपको दो समान टेक्स्ट बॉक्स **Comments** लेबल के साथ दिखेंगे—एक ऊपर की ओर, दूसरा थोड़ा नीचे। एक में टाइप करने से दूसरा तुरंत अपडेट हो जाएगा। + +## Frequently Asked Questions (FAQ) + +| Question | Answer | +|----------|--------| +| **Can I extract the actual signature bytes?** | `GetSignatureNames()` केवल लॉजिकल नाम लौटाता है। सर्टिफ़िकेट या सिग्नेचर वैल्यू निकालने के लिए आपको `SignatureField` ऑब्जेक्ट्स (`document.Form["fieldName"] as SignatureField`) की जरूरत होगी। | +| **Does PDF/X‑4 conversion work on encrypted PDFs?** | हाँ, जब तक आप पासवर्ड `Document.Open(file, password)` के माध्यम से प्रदान करते हैं। | +| **What if I need more than two widgets?** | प्रत्येक अतिरिक्त `WidgetAnnotation` के लिए `textBox.Widgets.Add()` कॉल करें। | +| **Will the blank page inherit page size from the original PDF?** | नया पेज डिफ़ॉल्ट साइज (A4) उपयोग करता है। यदि आवश्यक हो तो आप कस्टम डाइमेंशन वाले `Page` ऑब्जेक्ट को पास कर सकते हैं। | +| **Is the code compatible with .NET Core?** | बिल्कुल—Aspose.Pdf क्रॉस‑प्लेटफ़ॉर्म है। बस अपने .NET Core प्रोजेक्ट में NuGet पैकेज रेफ़रेंसेज़ जोड़ें। | + +## Conclusion + +इस ट्यूटोरियल में हमने **how to extract signatures from PDF** फ़ाइलों को दिखाया, साथ ही **how to add field**, **add blank page PDF**, **how to add widget**, और **preserve transparency PDF** को Aspose.Pdf for C# का उपयोग करके कैसे किया जाए, यह भी कवर किया। अब आपके पास एक ठोस, एंड‑टू‑एंड समाधान है जिसे आप किसी भी दस्तावेज़‑प्रोसेसिंग पाइपलाइन में डाल सकते हैं। + +अगली चुनौती के लिए तैयार हैं? इन तकनीकों को Aspose के OCR मॉड्यूल के साथ मिलाकर स्कैन किए हुए टेक्स्ट को पढ़ने की कोशिश करें। + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/hindi/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..6f1fd5c16 --- /dev/null +++ b/pdf/hindi/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,223 @@ +--- +category: general +date: 2026-04-02 +description: PDF हस्ताक्षर को जल्दी सत्यापित करें और Aspose.Pdf का उपयोग करके बेट्स + नंबरिंग कैसे जोड़ें सीखें। इसमें चरण‑दर‑चरण कोड और टिप्स शामिल हैं। +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: hi +og_description: Aspose.Pdf का उपयोग करके PDF हस्ताक्षर को जल्दी सत्यापित करें और बेट्स + नंबरिंग जोड़ना सीखें। पूर्ण उदाहरण का पालन करें और सामान्य गलतियों से बचें। +og_title: PDF हस्ताक्षर सत्यापित करें और बेट्स नंबरिंग जोड़ें – पूर्ण C# गाइड +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: PDF हस्ताक्षर सत्यापित करें और बेत्स नंबरिंग जोड़ें – पूर्ण C# गाइड +url: /hi/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF हस्ताक्षर सत्यापित करें और Bates नंबरिंग जोड़ें – पूर्ण C# गाइड + +क्या आपको कभी **PDF हस्ताक्षर सत्यापित** करने की ज़रूरत पड़ी है किसी अनुबंध को भेजने से पहले, लेकिन यह नहीं पता था कि कौन सा API कॉल इस्तेमाल करना है? आप अकेले नहीं हैं—कई डेवलपर्स को कानूनी‑बाध्यकारी PDFs को संभालते समय यही समस्या आती है। इस ट्यूटोरियल में हम बिल्कुल दिखाएंगे कि **Aspose.Pdf** के साथ **PDF हस्ताक्षर कैसे सत्यापित करें** और फिर आपको **Bates नंबरिंग कैसे जोड़ें** दिखाएंगे ताकि आपकी फ़ाइलें ऑडिट‑तैयार रहें। + +हम यह भी बताएँगे कि **हस्ताक्षर को प्रोग्रामेटिकली कैसे सत्यापित करें**, **एक ही पास में Bates कैसे जोड़ें**, और **PDF हस्ताक्षर जांच** के परिणामों को कैसे समझें ताकि आप आउटपुट पर भरोसा कर सकें। अंत तक आपके पास एक चलने योग्य C# कंसोल ऐप होगा जो दोनों कार्य करता है—कोई रहस्य नहीं, सिर्फ़ स्पष्ट कोड। + +--- + +## आपको क्या चाहिए + +- **.NET 6.0** या बाद का संस्करण (उदाहरण .NET Framework 4.7+ के साथ भी काम करता है) +- **Aspose.Pdf for .NET** NuGet पैकेज (संस्करण 23.11 या नया) +- एक साइन किया हुआ PDF फ़ाइल (`signed.pdf`) जिसे आप वैधता जांचना चाहते हैं +- एक साधारण PDF (`input.pdf`) जिसमें Bates नंबर जोड़ेंगे + +यदि आपके पास ये सब है, तो आप तैयार हैं। कोई अतिरिक्त SDK नहीं, कोई छिपी हुई कॉन्फ़िग फ़ाइल नहीं। + +--- + +## चरण 1: प्रोजेक्ट सेट अप करें + +एक कंसोल प्रोजेक्ट बनाकर शुरू करें: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +`Program.cs` खोलें और डिफ़ॉल्ट कोड को हटा दें। हम सब कुछ शून्य से बनाएँगे ताकि आप बाद में अंतिम संस्करण को कॉपी‑पेस्ट कर सकें। + +--- + +## चरण 2: PDF हस्ताक्षर सत्यापित करें + +### सत्यापन क्यों महत्वपूर्ण है + +डिजिटल हस्ताक्षर **समझौता** हो सकता है यदि अंतर्निहित प्रमाणपत्र रद्द हो गया हो या दस्तावेज़ पर हस्ताक्षर के बाद छेड़छाड़ की गई हो। Aspose.Pdf हमें एक सुविधाजनक `IsSignatureCompromised` मेथड देता है जो बूलियन रिटर्न करता है—सरल, फिर भी अधिकांश ऑडिट पाइपलाइन के लिए पर्याप्त शक्तिशाली। + +### कोड स्निपेट + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**व्याख्या** + +- `Document` PDF को मेमोरी में लोड करता है। +- `PdfFileSignature` दस्तावेज़ को रैप करता है और हस्ताक्षर‑संबंधित मेथड्स उपलब्ध कराता है। +- `IsSignatureCompromised("Signature1")` नाम वाले *Signature1* हस्ताक्षर की अखंडता जांचता है। +- बूलियन परिणाम बताता है कि हस्ताक्षर अभी भी भरोसेमंद है या नहीं। + +> **प्रो टिप:** यदि आप हस्ताक्षर फ़ील्ड का नाम नहीं जानते, तो पहले `pdfSignature.GetSignatureNames()` कॉल करें; यह सभी हस्ताक्षर पहचानकर्ताओं की सूची लौटाता है। + +--- + +## चरण 3: Bates नंबरिंग विकल्प तैयार करें + +### Bates नंबरिंग क्या है? + +Bates नंबर क्रमिक पहचानकर्ता होते हैं जो कानूनी या फोरेंसिक दस्तावेज़ के प्रत्येक पृष्ठ पर प्रिंट होते हैं। वे खोज या ऑडिट प्रक्रिया के दौरान पृष्ठों को संदर्भित करना आसान बनाते हैं। Aspose.Pdf का `BatesNumberingOptions` आपको प्रीफ़िक्स, प्रारंभिक संख्या, अंक गिनती, संरेखण, और मार्जिन—all एक ही ऑब्जेक्ट में—को कस्टमाइज़ करने देता है। + +### कोड जारी रखें + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**व्याख्या** + +- `BatesNumberingOptions` सभी फ़ॉर्मेटिंग विकल्पों को केंद्रीकृत करता है। +- `AddBatesNumbering` प्रत्येक पृष्ठ पर स्वचालित रूप से इटररेट करता है—मैन्युअल लूप की ज़रूरत नहीं। +- `Prefix` (`INV-`) और `StartNumber` (1000) लेबल बनाते हैं जैसे `INV-01000`, `INV-01001`, आदि। +- यदि आपको नंबर पृष्ठ पर ऊपर या नीचे चाहिए तो `BottomMargin` को समायोजित करें। + +--- + +## चरण 4: पूर्ण उदाहरण चलाएँ + +फ़ाइल सहेजें, फिर निष्पादित करें: + +```bash +dotnet run +``` + +आपको दो कंसोल लाइन्स दिखनी चाहिए: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +यदि पहली लाइन `True` प्रिंट करती है, तो हस्ताक्षर समझौता हुआ है—जिसका अर्थ है कि दस्तावेज़ पर हस्ताक्षर के बाद परिवर्तन किया गया हो सकता है या प्रमाणपत्र अब वैध नहीं है। ऐसे में आगे की प्रोसेसिंग को रोक दें। + +--- + +## चरण 5: सामान्य किनारे के मामलों और उनका समाधान + +| स्थिति | ध्यान देने योग्य बात | सुझाया गया समाधान | +|-----------|-------------------|---------------| +| **एकाधिक हस्ताक्षर** | `IsSignatureCompromised` एक समय में केवल एक फ़ील्ड जांचता है। | `pdfSignature.GetSignatureNames()` के माध्यम से लूप करें और प्रत्येक को सत्यापित करें। | +| **कस्टम हस्ताक्षर फ़ील्ड नाम** | `"Signature1"` का उपयोग करने से अपवाद फेंका जा सकता है यदि नाम अलग हो। | पहले नामों की सूची प्राप्त करें, या Acrobat में दिखे सटीक नाम को पास करें। | +| **बड़े PDFs (100+ पृष्ठ)** | Bates नंबर जोड़ने से मेमोरी‑गहन हो सकता है। | `Document.Save` को `SaveOptions` के साथ उपयोग करें जो स्ट्रीमिंग सक्षम करता है (`PdfSaveOptions { Compress = true }`)। | +| **प्रीफ़िक्स में गैर‑लैटिन अक्षर** | कुछ फ़ॉन्ट डिफ़ॉल्ट रूप से Unicode का समर्थन नहीं करते। | `pdfWithBates.Font` को Unicode‑संगत फ़ॉन्ट जैसे `Arial Unicode MS` सेट करें। | +| **नंबर बाएँ तरफ़ रखना है** | संरेखण हार्ड‑कोडेड `Right` है। | `BatesNumberingOptions` में `Alignment = HorizontalAlignment.Left` बदलें। | + +--- + +## चरण 6: परिणाम मैन्युअली सत्यापित करें (वैकल्पिक) + +`BatesNumbered.pdf` को किसी भी PDF व्यूअर में खोलें: + +1. पृष्ठों को पलटें—प्रत्येक पृष्ठ के नीचे‑दाएँ कोने में **INV‑01000** जैसा लेबल दिखना चाहिए। +2. Acrobat के **Signature Panel** में जाकर हस्ताक्षर पर डबल‑क्लिक करें और पुष्टि करें कि स्थिति कंसोल आउटपुट से मेल खाती है। + +यदि सब कुछ ठीक है, तो आपने सफलतापूर्वक **PDF हस्ताक्षर जांच** की स्थिति और **Bates नंबरिंग जोड़ना** दोनों एक साथ किया है। + +--- + +## अक्सर पूछे जाने वाले प्रश्न + +**प्रश्न: क्या मैं पूरे दस्तावेज़ को लोड किए बिना हस्ताक्षर सत्यापित कर सकता हूँ?** +उत्तर: Aspose.Pdf अंदर से फ़ाइल को स्ट्रीम करता है, लेकिन फिर भी आपको एक `Document` इंस्टेंस चाहिए। बहुत बड़े फ़ाइलों के लिए `PdfFileSignature` को सीधे फ़ाइल स्ट्रीम के साथ उपयोग करने पर विचार करें ताकि मेमोरी फुटप्रिंट कम रहे। + +**प्रश्न: क्या मुझे Aspose.Pdf के लिए लाइसेंस चाहिए?** +उत्तर: मुफ्त एवाल्यूएशन काम करता है, लेकिन वह वॉटरमार्क जोड़ता है। प्रोडक्शन के लिए उचित लाइसेंस आवश्यक है; अन्यथा आउटपुट PDFs में Aspose बैनर रहेगा। + +**प्रश्न: यदि मैं केवल कुछ पृष्ठों पर ही Bates नंबर जोड़ना चाहूँ तो?** +उत्तर: `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` का उपयोग करें जहाँ एरे उन पृष्ठ संख्याओं को दर्शाता है जिन्हें आप नंबर करना चाहते हैं। + +--- + +## निष्कर्ष + +अब आप **Aspose.Pdf** के साथ **PDF हस्ताक्षर कैसे सत्यापित करें**, बूलियन परिणाम के अर्थ को समझते हैं, और किसी भी PDF में **Bates नंबरिंग** आत्मविश्वास से जोड़ सकते हैं। पूरा, चलने योग्य उदाहरण दोनों कार्यों को मिलाता है, जिससे आपके पास एक एकल कंसोल टूल है जो दस्तावेज़ की प्रामाणिकता जांचता है और उसे ऑडिट‑तैयार पहचानकर्ता से स्टैम्प करता है। + +आगे आप **हस्ताक्षर को विश्वसनीय रूट स्टोर से सत्यापित** करने या कस्टम **Bates नंबरिंग** शैलियों (जैसे तिरछे स्टैम्प या सेक्शन‑प्रति‑प्रीफ़िक्स) के साथ प्रयोग कर सकते हैं। दोनों विषय उस नींव पर आधारित हैं जिसे आपने अभी हासिल किया है, और वे आपके दस्तावेज़‑प्रोसेसिंग पाइपलाइन को और अधिक मजबूत बनाएँगे। + +कोडिंग का आनंद लें, और याद रखें—हस्ताक्षर जांचना और पृष्ठों को नंबर देना एक आसान काम है जब आपके पास सही कोड हो! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/hindi/net/printing-rendering/_index.md index 16ee69d75..cc6962160 100644 --- a/pdf/hindi/net/printing-rendering/_index.md +++ b/pdf/hindi/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ ### [.NET के लिए Aspose.PDF का उपयोग करके PDF में कस्टम ज़ूम फैक्टर सेट करें - एक संपूर्ण गाइड](./aspose-pdf-net-set-zoom-factor-pdfs/) .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों में कस्टम ज़ूम फ़ैक्टर सेट करना सीखें। यह मार्गदर्शिका इंस्टॉलेशन, कार्यान्वयन चरणों और व्यावहारिक अनुप्रयोगों को कवर करती है। +### [C# में PDF को रेंडर कैसे करें – PNG, HTML और स्टैम्पिंग के लिए संपूर्ण गाइड](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +C# में Aspose.PDF का उपयोग करके PDF को PNG, HTML में बदलना और स्टैम्प जोड़ना सीखें। + ## अतिरिक्त संसाधन - [Aspose.PDF for Net दस्तावेज़ीकरण](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hindi/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/hindi/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..ebccef12f --- /dev/null +++ b/pdf/hindi/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-04-02 +description: C# में Aspose.PDF का उपयोग करके PDF को रेंडर कैसे करें। PDF को PNG में + रेंडर करना, PDF को HTML के रूप में सहेजना, और ऑटो‑फ़िट टेक्स्ट स्टैम्प्स को कुशलतापूर्वक + जोड़ना सीखें। +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: hi +og_description: C# में Aspose.PDF का उपयोग करके PDF को रेंडर कैसे करें। यह गाइड PDF + को PNG में रेंडर करने, HTML के रूप में सहेजने, और ऑटो‑फ़िट टेक्स्ट स्टैम्प बनाने + को दिखाता है। +og_title: C# में PDF को कैसे रेंडर करें – PNG, HTML और ऑटो‑फ़िट स्टैम्प्स +tags: +- Aspose.PDF +- C# +- PDF processing +title: C# में PDF को रेंडर कैसे करें – PNG, HTML और स्टैम्पिंग के लिए पूर्ण गाइड +url: /hi/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to Render PDF in C# – Complete Guide to PNG, HTML & Stamping + +क्या आपने कभी सोचा है **PDF को रेंडर करने** के बारे में .NET एप्लिकेशन में बिना किसी glyph को खोए? शायद आपने जल्दी से `PdfRenderer` आज़माया और गायब अक्षर देखे, या आपको थंबनेल के लिए एक साफ़ PNG चाहिए लेकिन आउटपुट जटिल दिख रहा है। मेरे अनुभव में, रेंडरिंग विकल्पों और फ़ॉन्ट हैंडलिंग का सही संयोजन टूटे हुए प्रीव्यू और पिक्सेल‑परफेक्ट इमेज के बीच अंतर बनाता है। + +इस ट्यूटोरियल में हम Aspose.PDF for .NET के साथ तीन वास्तविक‑दुनिया परिदृश्यों को देखेंगे: फ़ॉन्ट विश्लेषण के साथ PDF पेज को PNG में रेंडर करना, एक `TextStamp` जोड़ना जो अपने फ़ॉन्ट को स्वचालित रूप से री‑साइज़ करता है, और फ़ॉन्ट की CMap टेबल का उपयोग करके PDF को HTML के रूप में सहेजना। अंत तक आप **PDF को PNG में रेंडर** कर पाएँगे, **PDF पेज PNG में बदल** सकेंगे, **PDF पेज इमेज एक्सपोर्ट** कर सकेंगे, और यहाँ तक कि **PDF को HTML में सहेज** सकेंगे बिना किसी समस्या के। + +## Prerequisites + +- .NET 6.0 या बाद का (कोड .NET Framework 4.6+ पर भी काम करता है) +- Aspose.PDF for .NET NuGet पैकेज (`Install-Package Aspose.PDF`) +- एक PDF फ़ाइल जिसमें जटिल फ़ॉन्ट हों (जैसे `complexFonts.pdf`) रेंडरिंग डेमो के लिए +- C# और Visual Studio (या कोई भी पसंदीदा IDE) की बुनियादी जानकारी + +> **Pro tip:** यदि आप CI सर्वर पर हैं, तो सुनिश्चित करें कि Aspose लाइसेंस फ़ाइल या तो रिसोर्स के रूप में एम्बेडेड हो या पर्यावरण वेरिएबल के माध्यम से संदर्भित हो ताकि इवैल्यूएशन वॉटरमार्क न दिखें। + +--- + +## ## How to Render PDF to PNG with Font Analysis + +### Why analyze fonts? + +जब PDF में कस्टम या एम्बेडेड फ़ॉन्ट होते हैं, तो एक साधारण रेंडर उन glyph को छोड़ सकता है जिन्हें रेंडरर मैप नहीं कर पाता। `AnalyzeFonts` को सक्षम करने से Aspose फ़ॉन्ट स्ट्रीम की जाँच करता है और गायब glyph को प्रतिस्थापित करता है, जिससे एक सटीक इमेज मिलती है। + +### Step‑by‑step implementation + +1. **Create a `PngDevice` with `AnalyzeFonts` turned on.** +2. **Load the source PDF** using `Document`. +3. **Process the desired page** and write the PNG to disk. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**What you should see:** `YOUR_DIRECTORY` में `rendered.png` नाम की फ़ाइल होगी जो `complexFonts.pdf` के पहले पेज के समान दिखेगी, सभी विशेष अक्षर और diacritics सहित। + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### Common pitfalls & how to avoid them + +- **Missing fonts on the server:** यदि PDF उन फ़ॉन्ट को संदर्भित करता है जो एम्बेडेड नहीं हैं, तो उन फ़ॉन्ट को एप्लिकेशन के probing path में रखें या `FontRepository` को कस्टम फ़ोल्डर की ओर इंगित करें। +- **Large PDFs:** कई पेजों को लूप में रेंडर करने से मेमोरी की खपत बढ़ सकती है; प्रत्येक `Document` इंस्टेंस को तुरंत डिस्पोज़ करें या नीचे दिखाए गए `using` ब्लॉक्स का उपयोग करें। + +--- + +## ## Adding an Auto‑Fit TextStamp (Render PDF with Dynamic Text) + +### When would you need a dynamically sized stamp? + +कल्पना करें आप इनवॉइस बनाते हैं और आपको एक “PAID” वॉटरमार्क ओवरले करना है जो आप द्वारा चुने गए किसी भी आयत में फिट हो, चाहे टेक्स्ट की लंबाई कुछ भी हो। फ़ॉन्ट साइज को मैन्युअल रूप से गणना करना त्रुटिप्रवण है; Aspose का `AutoAdjustFontSizeToFitStampRectangle` इस काम को आसान बनाता है। + +### Step‑by‑step implementation + +1. **Configure a `TextStamp`** with auto‑adjust properties. +2. **Load the target PDF** you want to stamp. +3. **Add the stamp to a page** and save the result. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Result:** `stampAutoFit.pdf` में “Important notice” टेक्स्ट 300 × 150 pt आयत में बिल्कुल सही आकार में फिट हो गया है, चाहे मूल स्ट्रिंग की लंबाई कुछ भी हो। + +#### Edge cases to consider + +- **Very long strings:** यदि टेक्स्ट आयत से भी छोटा फ़ॉन्ट साइज पर बाहर निकलता है, तो Aspose `WordWrapMode` के अनुसार ट्रंकेट कर देगा। आप लंबाई पहले से जाँच सकते हैं या आयत का आकार बढ़ा सकते हैं। +- **Multiple stamps:** विभिन्न पेजों पर एक ही `TextStamp` इंस्टेंस को पुनः उपयोग किया जा सकता है, लेकिन ध्यान रखें कि पोजीशन प्रॉपर्टीज़ (`Left`, `Top`) अपनी अंतिम मान को रखती हैं—आवश्यकतानुसार रीसेट करें। + +--- + +## ## Saving PDF as HTML Using the Font’s CMap Table + +### Why bother with the CMap table? + +जब आप PDF को HTML में बदलते हैं, तो Unicode मैपिंग को संरक्षित करना खोज योग्य टेक्स्ट के लिए अत्यंत महत्वपूर्ण है। CMap‑आधारित रणनीति Aspose को फ़ॉन्ट की आंतरिक कैरेक्टर मैप को प्राथमिकता देने के लिए मजबूर करती है, जिससे सामान्य एन्कोडिंग की तुलना में अधिक सटीक टेक्स्ट एक्सट्रैक्शन मिलता है। + +### Step‑by‑step implementation + +1. **Create `HtmlSaveOptions`** with the CMap‑based encoding rule. +2. **Load the source PDF**. +3. **Save as HTML** using the configured options. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**What you’ll get:** यदि `SplitIntoPages` true है तो एक फ़ोल्डर मिलेगा जिसमें `cmapHtml.html` और संबंधित रिसोर्सेज होंगे। ब्राउज़र में HTML खोलें और आप देखेंगे कि चयन योग्य, खोज योग्य टेक्स्ट मूल PDF के लगभग समान है। + +#### Tips for a clean HTML export + +- **Images vs. vectors:** यदि आप PNG को JPEG की तुलना में तेज़ ग्राफ़िक्स के लिए पसंद करते हैं तो `RasterImagesSavingMode` को `RasterImagesSavingMode.AsEmbeddedPartsOfPng` सेट करें। +- **Large PDFs:** प्रत्येक पेज को हल्का रखने के लिए `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` का उपयोग करें। + +--- + +## ## Full Working Example – All Three Scenarios in One Project + +नीचे एक स्व-निहित कंसोल एप्लिकेशन है जो तीनों तकनीकों को साथ‑साथ दर्शाता है। इसे नई C# कंसोल प्रोजेक्ट में कॉपी‑पेस्ट करें, Aspose.PDF NuGet पैकेज जोड़ें, और फ़ाइल पाथ को समायोजित करें। + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +प्रोग्राम चलाएँ, और आपको मिलेगा: + +- `rendered.png` – PDF के पहले पेज की एक परिपूर्ण इमेज। +- `stampAutoFit.pdf` – मूल PDF जिसमें गतिशील आकार का “Important notice” स्टैम्प लगा है। +- `cmapHtml.html` (और पेज‑विशिष्ट HTML फ़ाइलें) – एक HTML संस्करण जो मूल टेक्स्ट एन्कोडिंग को संरक्षित रखता है। + +--- + +## ## Frequently Asked Questions (FAQ) + +**प्रश्न: क्या `AnalyzeFonts` रेंडरिंग समय बढ़ाता है?** +**उत्तर:** थोड़ा, क्योंकि Aspose प्रत्येक फ़ॉन्ट स्ट्रीम को स्कैन करता है। जटिल PDF जहाँ गायब glyph अस्वीकार्य होते हैं, उनके लिए यह समझौता आमतौर पर मूल्यवान होता है। + +**प्रश्न: क्या मैं लूप में कई पेज रेंडर कर सकता हूँ?** +**उत्तर:** बिल्कुल। बस `sourcePdf.Pages` पर इटररेट करें और `pngDevice.Process(page, $"page{page.Number}.png")` कॉल करें। यदि आप अलग‑अलग `Document` खोलते हैं तो प्रत्येक को डिस्पोज़ करना याद रखें। + +**प्रश्न: क्या होगा यदि + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 1f020fa27..109994393 100644 --- a/pdf/hongkong/net/conversion-export/_index.md +++ b/pdf/hongkong/net/conversion-export/_index.md @@ -219,7 +219,7 @@ Aspose.PDF Net 程式碼教學 了解如何使用 Aspose.PDF for .NET 將 PDF 文件轉換為具有外部 PNG 圖像的 HTML。本指南確保佈局保存和網路效能優化。 ### [使用 Aspose.PDF .NET 將 PDF 轉換為 HTML:綜合指南](./aspose-pdf-net-pdf-to-html-conversion/) -掌握使用 Aspose.PDF for .NET 進行 PDF 到 HTML 的轉換。透過可自訂的選項增強文件的可存取性和參與度。 +掌握使用 Aspose.PDF .NET 進行 PDF 到 HTML 的轉換。透過可自訂的選項增強文件的可存取性和參與度。 ### [使用 Aspose.PDF for .NET 將 PDF 轉換為 HTML](./pdf-to-html-conversion-aspose-dot-net/) Aspose.PDF Net 程式碼教學 @@ -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 影像。掌握自訂色彩深度和先進的影像處理技術。 +### [將 PDF 轉換為 HTML 並驗證 PDF 簽章 – 完整 Aspose .NET 指南](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +了解如何使用 Aspose.PDF for .NET 將 PDF 轉換為 HTML,並驗證 PDF 簽章的完整步驟與程式碼範例。 + ## 其他資源 - [Aspose.PDF 用於網頁文檔](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hongkong/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/hongkong/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..5f8f73cbf --- /dev/null +++ b/pdf/hongkong/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,256 @@ +--- +category: general +date: 2026-04-02 +description: 將 PDF 轉換為 HTML,同時保留向量,然後使用 Aspose PDF 驗證 PDF 簽名。學習 Aspose PDF 轉換並在 C# + 中檢查 PDF 數位簽名。 +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: zh-hant +og_description: 將 PDF 轉換為 HTML,同時保留向量圖形,並使用 Aspose PDF 驗證 PDF 簽名。逐步 C# 程式碼、技巧與邊緣案例處理。 +og_title: 將 PDF 轉換為 HTML 並驗證 PDF 簽章 – 完整 Aspose .NET 教程 +tags: +- Aspose.PDF +- C# +- PDF processing +title: 將 PDF 轉換為 HTML 並驗證 PDF 簽章 – 完整 Aspose .NET 指南 +url: /zh-hant/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 將 PDF 轉換為 HTML 並驗證 PDF 簽章 – 完整 Aspose .NET 教學 + +曾經需要 **將 PDF 轉換為 HTML**,卻擔心向量品質會遺失或數位簽章會被破壞嗎?你並不是唯一的遭遇者。許多開發者在 PDF 只包含向量圖形或使用 SHA‑3 數位簽章時卡住——一般的轉換器要麼把所有內容點陣化,要麼直接忽略簽章。 + +在本指南中,我們將示範使用 **Aspose.Pdf** for .NET 的實作方式:首先在將純向量 PDF 轉成乾淨的 HTML 時剔除點陣圖,接著示範如何 **驗證 PDF 簽章**(是的,就是 SHA‑3‑256),並在主控台顯示結果。完成後,你將得到一個可直接執行的 C# 程式,同時掌握避免常見陷阱的幾個小技巧。 + +## 需要的環境 + +- **Aspose.Pdf for .NET**(截至 2026‑04 最新版,例如 23.12)。 +- .NET 開發環境(Visual Studio 2022 或安裝 C# 擴充功能的 VS Code)。 +- 兩個範例 PDF: + 1. `vectorOnly.pdf` – 只包含向量與文字,沒有點陣圖。 + 2. `signed_sha3.pdf` – 以 SHA‑3‑256 雜湊簽署的 PDF。 + +除 `Aspose.Pdf` 之外,不需要額外的 NuGet 套件。 + +--- + +## 步驟 1:建立專案並載入 PDF + +建立一個新的 Console 應用程式,加入 Aspose.Pdf NuGet,並引用所需的命名空間。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*為什麼這很重要*:先把文件載入記憶體,可讓我們在同一個物件上同時執行轉換與簽章驗證,降低記憶體使用量。 + +--- + +## 步驟 2:轉換 PDF 為 HTML 並跳過點陣圖 + +Aspose.Pdf 的 `HtmlSaveOptions` 提供精細的圖像處理控制。將 `RasterImagesSavingMode` 設為 `Skip`,即可讓函式庫完全忽略點陣圖——對於純向量來源來說正好。 + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**預期輸出**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*小技巧*:若之後需要把 HTML 嵌入網頁,產生的檔案只會包含 SVG 與 CSS,沒有龐大的 PNG/JPEG 資料。 + +--- + +## 步驟 3:建立簽章處理器 + +Aspose.Pdf 的 `PdfFileSignature` 類別是所有數位簽章操作的入口。它會讀取簽章字典、取得簽名者名稱,並允許使用指定的雜湊演算法進行驗證。 + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*為什麼這一步關鍵*:沒有這個處理器就無法列舉簽章或選擇所需的雜湊演算法(例如 SHA‑3‑256)。 + +--- + +## 步驟 4:使用 SHA‑3‑256 列舉並驗證每個簽章 + +`GetSignNames()` 方法會回傳 PDF 中的所有簽章標籤。遍歷它們,呼叫 `VerifySignature` 並傳入 `DigestHashAlgorithm.Sha3_256`,最後把結果印出。 + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**範例主控台輸出**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*邊緣情況*:若簽章使用其他雜湊(例如 SHA‑256),驗證會回傳 `False`。你可以在迴圈內嘗試其他 `DigestHashAlgorithm` 以作為備援檢查。 + +--- + +## 步驟 5:完整範例(全部程式碼一次呈現) + +以下是可直接貼到 `Program.cs` 的完整程式。將 `YOUR_DIRECTORY` 替換成實際放置 PDF 的資料夾路徑。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +執行程式(`dotnet run` 或在 Visual Studio 按 **F5**)。你應該會先看到轉換成功的訊息,接著是簽章驗證結果。 + +--- + +## 常見問題與解決方式 + +| 問題 | 解答 | +|----------|--------| +| **HTML 仍會保留原始字型嗎?** | Aspose.Pdf 會預設將使用的字型以 base‑64 data URI 內嵌,因此即使主機沒有安裝該字型,輸出仍能正確呈現。 | +| **如果 PDF 同時有向量與圖像該怎麼辦?** | 保持 `RasterImagesSavingMode = Skip` 以去除圖像,或改成 `EmbedAll` 以保留圖像。此設定是每次轉換可自行決定,若需要兩種版本可執行兩次轉換。 | +| **我的簽章使用 SHA‑512,如何驗證?** | 把 `DigestHashAlgorithm.Sha3_256` 換成 `DigestHashAlgorithm.Sha512`。也可以先從簽章字典讀出雜湊演算法,再動態選擇。 | +| **要怎麼取得簽署者的憑證資訊?** | 驗證後呼叫 `signatureHandler.GetSignatureInfo(signName).Certificate`,即可取得 X.509 憑證,並檢查 `Subject`、`Issuer` 等欄位。 | +| **PDF 有密碼保護怎麼處理?** | 使用 `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })` 載入,之後的流程保持不變。 | + +--- + +## 讓程式上線的實務小技巧 + +1. **正確釋放 PDF** – 使用 `using` 區塊或呼叫 `Dispose()` 以釋放原生資源。 +2. **批次處理** – 若有數十甚至上百個 PDF,可遍歷資料夾、將結果寫入 CSV,並使用 `Parallel.ForEach` 進行平行轉換。 +3. **日誌記錄** – 用結構化日誌(Serilog、NLog)取代 `Console.WriteLine`,在大量簽章驗證時更易追蹤。 +4. **錯誤處理** – 捕捉 `Aspose.Pdf.Exceptions`,優雅處理損毀檔案: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **版本相容性** – Aspose.Pdf 更新頻繁。務必以 `csproj` 中指定的版本測試,本文示範的 API 在 23.x 及之後的版本皆適用。 + +--- + +## 結論 + +我們已經 **將 PDF 轉換為僅保留向量與文字的 HTML**,同時 **使用 SHA‑3‑256 演算法驗證 PDF 簽章**,全部只需幾行 C# 程式碼。重點如下: + +- 使用 `HtmlSaveOptions.RasterImagesSavingMode = Skip` 取得乾淨的向量‑HTML。 +- 透過 `PdfFileSignature` 與 `DigestHashAlgorithm.Sha3_256` 可靠地 **檢查 PDF 數位簽章**。 + +接下來,你可以探索 **aspose pdf conversion** 成 PNG、抽取內嵌檔案,或建置接受 PDF 並回傳已驗證 HTML 片段的 Web 服務。 + +快試試看,調整選項,並分享你的發現。祝開發順利! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 e82f0d678..466d933c8 100644 --- a/pdf/hongkong/net/digital-signatures/_index.md +++ b/pdf/hongkong/net/digital-signatures/_index.md @@ -35,6 +35,9 @@ Aspose.PDF Net 程式碼教學 ### [如何使用 Aspose.PDF .NET 提取 PDF 簽名資訊:逐步指南](./extract-pdf-signature-info-aspose-pdf-net/) 了解如何使用 Aspose.PDF for .NET 從 PDF 中提取數位簽章資訊。本逐步指南涵蓋安裝、實施和實際應用。 +### [如何從 PDF 中提取簽名 – Aspose C# 指南](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +了解如何使用 Aspose C# 從 PDF 中提取簽名,提供完整步驟與範例程式碼。 + ### [如何使用 Aspose.PDF 在 .NET 中實現數位簽章:綜合指南](./implement-pdf-signatures-dotnet-aspose-pdf-guide/) 了解如何使用 Aspose.PDF for .NET 在 PDF 上實現安全數位簽名,包括抑制選用欄位。 @@ -53,6 +56,9 @@ Aspose.PDF Net 程式碼教學 ### [在 C# 中驗證 PDF 簽章 – 完整指南驗證 PDF 數位簽名](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) 了解如何在 C# 中使用 Aspose.PDF 驗證 PDF 檔案的數位簽章,提供完整步驟與範例程式碼。 +### [驗證 PDF 簽章並添加 Bates 編號 – 完整 C# 指南](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +了解如何使用 Aspose.PDF for .NET 在 C# 中驗證 PDF 簽章並添加 Bates 編號,提供完整步驟與範例程式碼。 + ### [載入 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-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/hongkong/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..e18ff3028 --- /dev/null +++ b/pdf/hongkong/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,247 @@ +--- +category: general +date: 2026-04-02 +description: 了解如何使用 Aspose.Pdf 在 C# 中提取簽名、添加欄位、插入空白頁 PDF、添加小工具,以及保留 PDF 的透明度。 +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: zh-hant +og_description: 如何從 PDF 中提取簽名,並使用 Aspose.Pdf 執行相關任務,如新增欄位、空白頁、小工具,以及保留透明度。 +og_title: 如何從 PDF 中提取簽名 – Aspose C# 指南 +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: 如何從 PDF 提取簽名 – Aspose C# 指南 +url: /zh-hant/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何從 PDF 中提取簽名 – Aspose C# 指南 + +**How to extract signatures from a PDF** 是在自動化合約處理、發票審批或任何依賴數位簽名的工作流程時的常見需求。 +在本指南中,我們還將示範 **how to add field**、**add blank page PDF**、**how to add widget** 以及 **preserve transparency PDF**,使用 Aspose.Pdf .NET 函式庫。 + +想像一下,你每晚會收到數十個已簽署的 PDF;手動打開每個檔案來驗證簽名將是一場噩夢。只需幾行 C# 程式碼,就能以程式方式取得簽名名稱,保持原始圖形完整,甚至在文件中加入新的表單欄位——全部不會破壞現有的透明度或色彩設定檔。 + +> **您將獲得:** 一個完整且可執行的範例,將 PDF 轉換為 PDF/X‑4(保留透明度),提取所有嵌入的簽名名稱,新增空白頁,並建立一個在同一頁面上出現兩次的文字方塊表單欄位。 + +## 前置條件 + +- .NET 6.0 或更新版本(此程式碼亦可於 .NET Framework 使用) +- Aspose.Pdf for .NET **v25.2** 或更新版本(需要 `GetSignatureNames()`) +- Visual Studio 專案或任何 C# IDE +- 三個您自行管理的範例 PDF 檔案: + - `source.pdf` – 您想在保留透明度的情況下轉換的任何 PDF + - `signed.pdf` – 已包含數位簽名的 PDF + - (可選)用於輸出檔案的空資料夾 + +> **專業提示:** 若您尚未取得授權版,可於 Aspose 官方網站申請免費暫時授權。免費模式可用於測試,但會加上浮水印。 + +## 步驟 1 – 透過轉換為 PDF/X‑4 以保留透明度 + +在將 PDF 平面化時,透明度與嵌入的色彩設定檔常會遺失。轉換為 **PDF/X‑4** 可保留這些視覺元素,對於列印就緒的文件至關重要。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**為何重要:** +PDF/X‑4 是保留即時透明度的圖形交換 PDF 的 ISO 標準。使用 `PdfFormatConversionOptions` 可避免將透明物件光柵化的常見問題,後者會大幅增加檔案大小並降低品質。 + +## 步驟 2 – 如何從 PDF 中提取簽名 + +Aspose 在 25.2 版中引入了 `GetSignatureNames()`,讓簽名提取只需一行程式碼。此方法會回傳每個數位簽名欄位所指派的邏輯名稱陣列。 + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**預期結果:** 若 `signed.pdf` 包含兩個名稱分別為 *ManagerSig* 與 *ClientSig* 的簽名,主控台將會輸出: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**邊緣情況處理:** +- 若 PDF 沒有簽名,`GetSignatureNames()` 會回傳空陣列——不會拋出例外。 +- 若 PDF 的簽名欄位損毀,可將呼叫包在 `try/catch` 中,記錄錯誤而不中止整個流程。 + +## 步驟 3 – 新增空白頁 PDF 並建立具多個 Widget 的文字方塊 + +新增頁面相當簡單,但 **how to add field** 與 **how to add widget** 同時使用時需要一些細節。*Widget* 是表單欄位的視覺呈現;您可以將多個 widget 附加到同一個邏輯欄位,使相同資料出現在多個位置。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**為何使用多個 widget?** +假設您需要相同的註解同時出現在合約的正面與背面。將兩個 widget 附加到同一欄位,使用者在任一位置的變更都會自動同步至另一處。 + +**常見陷阱:** +- 忘記將欄位加入 `newDoc.Form`,會導致 widget 在 PDF 閱讀器中不可見。 +- 為兩個 widget 使用相同的矩形座標會使它們重疊——請確保 `Rectangle` 的值不同。 + +## 步驟 4 – 整合全部:完整可執行範例 + +以下是一個單一程式,依照上述順序執行每個步驟。將其複製貼上至新的主控台專案,調整路徑後執行。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### 預期輸出 + +執行程式時,您應該會看到類似以下的結果: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +在 Adobe Acrobat Reader 中開啟 `TextBoxMultipleWidgets.pdf`;您會看到兩個標示為 **Comments** 的相同文字方塊——一個位於上方,另一個稍低。於其中一個輸入文字時,另一個會即時同步更新。 + +## 常見問題 (FAQ) + +| 問題 | 答案 | +|----------|--------| +| **我可以提取實際的簽名位元組嗎?** | `GetSignatureNames()` 只會回傳邏輯名稱。若要取得憑證或簽名值,需要使用 `SignatureField` 物件(`document.Form["fieldName"] as SignatureField`)。 | +| **PDF/X‑4 轉換能在加密的 PDF 上使用嗎?** | 可以,只要在 `Document.Open(file, password)` 中提供密碼即可。 | +| **如果需要超過兩個 widget 該怎麼辦?** | 只需對每個額外的 `WidgetAnnotation` 呼叫 `textBox.Widgets.Add()` 即可。 | +| **空白頁會繼承原始 PDF 的頁面尺寸嗎?** | 新頁面使用預設尺寸(A4)。如有需要,可傳入自訂尺寸的 `Page` 物件。 | +| **此程式碼相容於 .NET Core 嗎?** | 絕對相容——Aspose.Pdf 為跨平台套件。只要在 .NET Core 專案中引用 NuGet 套件即可。 | + +## 結論 + +在本教學中,我們示範了 **how to extract signatures from PDF**,同時涵蓋 **how to add field**、**add blank page PDF**、**how to add widget** 與 **preserve transparency PDF**,使用 Aspose.Pdf for C#。您現在擁有一個完整、端對端的解決方案,可直接嵌入任何文件處理流程中。 + +準備好接受下一個挑戰了嗎?試著將這些技巧與 Aspose 的 OCR 模組結合,從掃描文件中讀取文字。 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/hongkong/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..6e37a3a3c --- /dev/null +++ b/pdf/hongkong/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,221 @@ +--- +category: general +date: 2026-04-02 +description: 快速驗證 PDF 簽名,並學習如何使用 Aspose.Pdf 添加 Bates 編號。內含逐步程式碼與技巧。 +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: zh-hant +og_description: 快速驗證 PDF 簽章,並學習如何使用 Aspose.Pdf 添加 Bates 編號。遵循完整範例,避免常見陷阱。 +og_title: 驗證 PDF 簽名並加入 Bates 編號 – 完整 C# 指南 +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: 驗證 PDF 簽名並加入 Bates 編號 – 完整 C# 指南 +url: /zh-hant/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 驗證 PDF 簽章並加入 Bates 編號 – 完整 C# 指南 + +有沒有曾經在寄出合約前需要 **驗證 PDF 簽章**,卻不確定該使用哪個 API 呼叫?你並不孤單——許多開發者在處理具法律效力的 PDF 時都會碰到這個問題。在本教學中,我們將一步步說明如何使用 Aspose.Pdf **驗證 PDF 簽章**,並示範 **如何加入 Bates 編號**,讓你的檔案保持可稽核的狀態。 + +我們也會提及以程式方式 **驗證簽章**、一次完成 **加入 Bates**,以及說明 **檢查 PDF 簽章** 結果,讓你能信賴輸出。完成後,你將擁有一個可執行的 C# 主控台應用程式,同時執行這兩項任務——沒有神祕,只要清晰的程式碼。 + +--- + +## 需要的環境 + +- **.NET 6.0** 或更新版本(此範例亦支援 .NET Framework 4.7 以上) +- **Aspose.Pdf for .NET** NuGet 套件(版本 23.11 或更新) +- 一個已簽署的 PDF 檔案(`signed.pdf`)以供驗證 +- 一個普通的 PDF(`input.pdf`)將用來加入 Bates 編號 + +只要具備上述條件,即可開始。無需額外 SDK,亦無隱藏的設定檔。 + +--- + +## 步驟 1:設定專案 + +先建立一個主控台專案: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +開啟 `Program.cs` 並清除預設程式碼。我們將從頭開始撰寫,之後你可以直接複製貼上最終版本。 + +--- + +## 步驟 2:驗證 PDF 簽章 + +### 為何驗證很重要 + +如果基礎憑證被撤銷或文件在簽署後被竄改,數位簽章可能會 **受損**。Aspose.Pdf 提供了便利的 `IsSignatureCompromised` 方法,回傳布林值——簡單卻足以應付大多數稽核流程。 + +### 程式碼片段 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**說明** + +- `Document` 將 PDF 載入記憶體。 +- `PdfFileSignature` 包裝該文件,提供與簽章相關的方法。 +- `IsSignatureCompromised("Signature1")` 檢查名為 *Signature1* 的簽章完整性。 +- 布林結果告訴你簽章是否仍然可信。 + +> **小技巧:** 若不確定簽章欄位名稱,可先呼叫 `pdfSignature.GetSignatureNames()`;它會回傳所有簽章識別碼的清單。 + +--- + +## 步驟 3:設定 Bates 編號選項 + +### 什麼是 Bates 編號? + +Bates 編號是印在法律或鑑識文件每一頁上的連續識別碼。它們讓在取證或稽核過程中引用頁面變得輕鬆。Aspose.Pdf 的 `BatesNumberingOptions` 允許你在同一個物件中自訂前綴、起始號碼、位數、對齊方式與邊距。 + +### 程式碼續寫 + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**說明** + +- `BatesNumberingOptions` 集中所有格式設定。 +- `AddBatesNumbering` 會自動遍歷每一頁——不需要手動迴圈。 +- `Prefix` (`INV-`) 與 `StartNumber` (1000) 產生如 `INV-01000`、`INV-01001` 等標籤。 +- 如需將編號位置上移或下移,可調整 `BottomMargin`。 + +--- + +## 步驟 4:執行完整範例 + +儲存檔案後,執行以下指令: + +```bash +dotnet run +``` + +你應該會看到兩行主控台輸出: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +如果第一行顯示 `True`,表示簽章已受損——也就是說文件可能在簽署後被更改,或憑證已不再有效。此時應中止後續的任何處理。 + +--- + +## 步驟 5:常見邊緣案例與處理方式 + +| Situation | What to Watch For | Suggested Fix | +|-----------|-------------------|---------------| +| **多重簽章** | `IsSignatureCompromised` 只能一次檢查單一欄位。 | 迴圈 `pdfSignature.GetSignatureNames()`,逐一驗證。 | +| **自訂簽章欄位名稱** | 使用 `"Signature1"` 若名稱不同可能拋出例外。 | 先取得名稱清單,或傳入 Acrobat 中看到的確切名稱。 | +| **大型 PDF(100 頁以上)** | 加入 Bates 編號可能佔用大量記憶體。 | 使用 `Document.Save` 搭配啟用串流的 `SaveOptions`(如 `PdfSaveOptions { Compress = true }`)。 | +| **前綴含非拉丁字元** | 部分字型預設不支援 Unicode。 | 設定 `pdfWithBates.Font` 為支援 Unicode 的字型,例如 `Arial Unicode MS`。 | +| **需要將編號放在左側** | 對齊方式寫死為 `Right`。 | 在 `BatesNumberingOptions` 中將 `Alignment = HorizontalAlignment.Left`。 | + +--- + +## 步驟 6:手動驗證結果(可選) + +在任意 PDF 檢視器中開啟 `BatesNumbered.pdf`: + +1. 翻閱每一頁——每頁應在右下角顯示類似 **INV‑01000** 的標籤。 +2. 使用 Acrobat 的 **Signature Panel**,雙擊簽章以確認其狀態與主控台輸出相符。 + +若所有項目皆符合,即表示你已成功 **檢查 PDF 簽章** 狀態,並一次性 **加入 Bates 編號**。 + +--- + +## 常見問與答 + +**Q: 我可以在不載入整個文件的情況下驗證簽章嗎?** +A: Aspose.Pdf 會在底層以串流方式處理檔案,但仍需建立 `Document` 實例。對於超大型檔案,可直接使用 `PdfFileSignature` 搭配檔案串流,以降低記憶體佔用。 + +**Q: 使用 Aspose.Pdf 是否需要授權?** +A: 免費評估版可使用,但會加上浮水印。正式環境建議購買授權,否則輸出的 PDF 會帶有 Aspose 標誌。 + +**Q: 若只想在部分頁面加入 Bates 編號該怎麼做?** +A: 使用 `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })`,其中陣列列出欲編號的頁碼。 + +--- + +## 結論 + +現在你已了解如何使用 Aspose.Pdf **驗證 PDF 簽章**,明白布林結果的意義,且能自信地 **加入 Bates 編號** 至任何你掌控的 PDF。完整且可執行的範例結合了兩項功能,提供一個主控台工具,既能檢查文件真偽,又能加上可稽核的識別標記。 + +接下來,你可以探索如何針對受信任的根憑證庫 **驗證簽章**,或嘗試自訂的 **加入 Bates 編號** 風格,例如斜角印章或依段落前綴。這兩個主題皆建立在你剛掌握的基礎上,能讓文件處理流程更為健全。 + +祝開發順利,記得只要有正確的程式碼,檢查簽章與編頁就是輕而易舉的事!🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/hongkong/net/printing-rendering/_index.md index c603d7185..e8d157373 100644 --- a/pdf/hongkong/net/printing-rendering/_index.md +++ b/pdf/hongkong/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ ### [使用 Aspose.PDF for .NET 在 PDF 中設定自訂縮放比例 - 完整指南](./aspose-pdf-net-set-zoom-factor-pdfs/) 了解如何使用 Aspose.PDF for .NET 在 PDF 文件中設定自訂縮放比例。本指南涵蓋安裝、實施步驟和實際應用。 +### [如何在 C# 中渲染 PDF – 完整指南:PNG、HTML 與蓋章](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +了解如何使用 Aspose.PDF for .NET 在 C# 中將 PDF 渲染為 PNG、HTML,並應用蓋章功能的完整步驟說明。 + ## 其他資源 - [Aspose.PDF 用於網頁文檔](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hongkong/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/hongkong/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..4df7dd453 --- /dev/null +++ b/pdf/hongkong/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-04-02 +description: 如何在 C# 中使用 Aspose.PDF 渲染 PDF。學習將 PDF 渲染為 PNG、將 PDF 儲存為 HTML,以及高效地加入自動適應的文字印章。 +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: zh-hant +og_description: 如何在 C# 中使用 Aspose.PDF 進行 PDF 渲染。本指南展示了將 PDF 渲染為 PNG、另存為 HTML,以及建立自動適應文字印章。 +og_title: 如何在 C# 中渲染 PDF – PNG、HTML 與自動適應印章 +tags: +- Aspose.PDF +- C# +- PDF processing +title: 如何在 C# 中渲染 PDF – PNG、HTML 與加蓋印章完整指南 +url: /zh-hant/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 C# 中渲染 PDF – 完整指南:PNG、HTML 與加蓋 + +有沒有想過 **如何在 .NET 應用程式中渲染 PDF** 而不遺失任何字形?也許你曾嘗試過快速的 `PdfRenderer` 卻看到缺字,或是需要一張清晰的 PNG 作為縮圖卻顯得鋸齒狀。根據我的經驗,正確的渲染選項與字型處理的組合,決定了預覽是崩潰還是像素完美的圖像。 + +在本教學中,我們將以 Aspose.PDF for .NET 為例,走過三個實務情境:將 PDF 頁面渲染成 PNG 並分析字型、加入自動調整字型大小的 `TextStamp`,以及使用字型的 CMap 表格將 PDF 另存為 HTML。完成後,你將能 **將 PDF 渲染為 PNG**、**將 PDF 頁面轉為 PNG**、**匯出 PDF 頁面圖像**,甚至 **將 PDF 儲存為 HTML**,毫無阻礙。 + +## 前置條件 + +- .NET 6.0 或更新版本(程式碼同樣適用於 .NET Framework 4.6+) +- Aspose.PDF for .NET NuGet 套件(`Install-Package Aspose.PDF`) +- 一個含有複雜字型的 PDF 檔(例如 `complexFonts.pdf`),用於渲染示範 +- 具備 C# 與 Visual Studio(或你慣用的 IDE)基本知識 + +> **專業小技巧:** 若你在 CI 伺服器上執行,請確保 Aspose 授權檔以資源方式嵌入或透過環境變數引用,避免產生評估水印。 + +--- + +## ## 如何使用字型分析將 PDF 渲染為 PNG + +### 為什麼要分析字型? + +當 PDF 包含自訂或嵌入字型時,若直接渲染,渲染器可能無法對應而遺失字形。啟用 `AnalyzeFonts` 會強制 Aspose 檢查字型資料流並替換缺失字形,確保產出圖像忠實原稿。 + +### 步驟說明 + +1. **建立帶有 `AnalyzeFonts` 的 `PngDevice`。** +2. **使用 `Document` 載入來源 PDF。** +3. **處理目標頁面並將 PNG 寫入磁碟。** + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**預期結果:** 在 `YOUR_DIRECTORY` 中會產生名為 `rendered.png` 的檔案,畫面與 `complexFonts.pdf` 的第一頁完全相同,包含所有特殊字元與變音符號。 + +![已渲染的 PDF 頁面 PNG 圖像](rendered.png "已渲染的 PDF 頁面 PNG 圖像") + +#### 常見陷阱與避免方式 + +- **伺服器缺少字型:** 若 PDF 參考的字型未嵌入,請將該字型放置於應用程式的探測路徑,或設定 `FontRepository` 指向自訂資料夾。 +- **大型 PDF:** 迴圈渲染多頁會佔用大量記憶體;請即時釋放每個 `Document` 實例,或如範例使用 `using` 區塊。 + +--- + +## ## 新增自動適應的 TextStamp(動態文字渲染 PDF) + +### 什麼情況需要動態大小的印章? + +想像你在產生發票時,需要在任意矩形上覆蓋「PAID」浮水印,且文字長度不固定。手動計算字型大小容易出錯;Aspose 的 `AutoAdjustFontSizeToFitStampRectangle` 會自動完成這項工作。 + +### 步驟說明 + +1. **設定具備自動調整屬性的 `TextStamp`。** +2. **載入欲加蓋的目標 PDF。** +3. **將印章加入頁面並儲存結果。** + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**結果:** `stampAutoFit.pdf` 內的文字「Important notice」會完美填滿 300 × 150 pt 的矩形,無論原始字串長度為何。 + +#### 需要留意的邊緣情況 + +- **過長字串:** 若文字即使在最小字型仍超出矩形,Aspose 會依 `WordWrapMode` 進行截斷。你可以事先檢查長度或放大矩形尺寸。 +- **多個印章:** 在不同頁面重複使用同一個 `TextStamp` 實例是可行的,但請記得 `Left`、`Top` 等位置屬性會保留上一次的值——需要時自行重設。 + +--- + +## ## 使用字型 CMap 表格將 PDF 儲存為 HTML + +### 為什麼要使用 CMap 表格? + +將 PDF 轉為 HTML 時,保留 Unicode 對應對於可搜尋文字至關重要。基於 CMap 的策略會讓 Aspose 優先使用字型內部的字元映射,通常比通用編碼產生更精確的文字抽取。 + +### 步驟說明 + +1. **建立帶有 CMap 編碼規則的 `HtmlSaveOptions`。** +2. **載入來源 PDF。** +3. **使用設定好的選項將 PDF 儲存為 HTML。** + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**你會得到:** 若 `SplitIntoPages` 為 true,會產生一個資料夾,內含 `cmapHtml.html` 及相關資源。於瀏覽器開啟該 HTML,會發現可選取、可搜尋的文字與原始 PDF 幾乎完全一致。 + +#### 產出乾淨 HTML 的小技巧 + +- **影像 vs 向量:** 若想要更銳利的圖形,可將 `RasterImagesSavingMode` 設為 `RasterImagesSavingMode.AsEmbeddedPartsOfPng`,改用 PNG 而非 JPEG。 +- **大型 PDF:** 使用 `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages`,讓每頁的 HTML 檔案保持輕量。 + +--- + +## ## 完整範例 – 三種情境一次搞定 + +以下是一個自包含的 Console 應用程式,示範上述三種技術。直接複製貼上至新的 C# Console 專案,加入 Aspose.PDF NuGet 套件,並依需求調整檔案路徑。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +執行程式後,你會看到: + +- `rendered.png` – 首頁的完美圖像。 +- `stampAutoFit.pdf` – 原始 PDF 加上動態大小的「Important notice」印章。 +- `cmapHtml.html`(以及分頁的 HTML 檔) – 保留原始文字編碼的 HTML 版。 + +--- + +## ## 常見問題 (FAQ) + +**Q: `AnalyzeFonts` 會增加渲染時間嗎?** +A: 會稍微增加,因為 Aspose 必須掃描每個字型資料流。但對於字形複雜、不能遺失字形的 PDF,這個代價通常是值得的。 + +**Q: 可以在迴圈中渲染多頁嗎?** +A: 完全可以。只要遍歷 `sourcePdf.Pages`,然後呼叫 `pngDevice.Process(page, $"page{page.Number}.png")` 即可。若分別開啟多個 `Document`,別忘了適時釋放。 + +**Q: 如果…** + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 c01e9b243..15d1063fa 100644 --- a/pdf/hungarian/net/conversion-export/_index.md +++ b/pdf/hungarian/net/conversion-export/_index.md @@ -192,7 +192,7 @@ Tanuld meg, hogyan konvertálhatsz PDF fájlokat kiváló minőségű, többolda Tanuld meg, hogyan konvertálhatsz PDF fájlokat PostScript formátumba az Aspose.PDF for .NET segítségével ezzel a lépésről lépésre haladó útmutatóval. Tökéletes választás kiváló minőségű nyomtatási igényekhez. ### [PDF konvertálása TIFF formátumba az Aspose.PDF for .NET használatával: lépésről lépésre útmutató](./convert-pdf-to-tiff-aspose-net/) -Tanuld meg, hogyan konvertálhatsz PDF fájlokat kiváló minőségű TIFF képekké az Aspose.PDF for .NET segítségével. Kövesd lépésről lépésre szóló útmutatónkat kódpéldákkal és konfigurációs tippekkel. +Tanuld meg, hogyan konvertálhatsz PDF fájlokat kiváló minőségű TIFF képekké az Aspose.PDF for .NET segítségével. Kövesd lépésről lépésre útmutatónkat kódpéldákkal és konfigurációs tippekkel. ### [PDF konvertálása XML-lé az Aspose.PDF for .NET használatával: lépésről lépésre útmutató](./pdf-to-xml-conversion-aspose-pdf-net/) Sajátítsa el a PDF dokumentumok XML-be konvertálásának művészetét az Aspose.PDF for .NET segítségével. Kövesse ezt az átfogó útmutatót, és fejlessze dokumentumkezelését. @@ -227,6 +227,9 @@ Kód oktatóanyag az Aspose.PDF Nethez ### [PDF-ből TIFF-be konvertálás .NET-ben az Aspose.PDF használatával: lépésről lépésre útmutató](./pdf-to-tiff-conversion-aspose-pdf-net/) Tanuld meg, hogyan konvertálhatsz PDF dokumentumokat TIFF képekké az Aspose.PDF for .NET segítségével. Sajátítsd el az egyéni színmélységeket és a fejlett képfeldolgozási technikákat. +### [PDF konvertálása HTML-be és PDF aláírás ellenőrzése – Teljes Aspose .NET útmutató](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Ismerje meg, hogyan konvertálhat PDF-et HTML-be, majd ellenőrizheti a PDF aláírását az Aspose.PDF for .NET segítségével, részletes kódpéldákkal. + ## 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/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/hungarian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..97db840c6 --- /dev/null +++ b/pdf/hungarian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,255 @@ +--- +category: general +date: 2026-04-02 +description: PDF konvertálása HTML-re vektorok megtartásával, majd a PDF-aláírás ellenőrzése + az Aspose PDF segítségével. Ismerje meg az Aspose PDF konverziót, és ellenőrizze + a PDF digitális aláírást C#‑ban. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: hu +og_description: PDF konvertálása HTML-re vektorok megőrzésével, és PDF-aláírás ellenőrzése + az Aspose PDF segítségével. Lépésről lépésre C# kód, tippek és szélhelyzetek kezelése. +og_title: PDF konvertálása HTML-re és PDF-aláírás ellenőrzése – Teljes Aspose .NET + útmutató +tags: +- Aspose.PDF +- C# +- PDF processing +title: PDF konvertálása HTML-re és PDF-aláírás ellenőrzése – Teljes Aspose .NET útmutató +url: /hu/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF konvertálása HTML-re és a PDF aláírás ellenőrzése – Teljes Aspose .NET útmutató + +Valaha is szükséged volt **PDF konvertálására HTML-re**, de aggódtál, hogy elveszíted a vektorok minőségét vagy megszakad a digitális aláírás? Nem vagy egyedül. Sok fejlesztő szembesül nehézséggel, amikor egy PDF csak vektoros grafikát vagy SHA‑3 alapú digitális aláírást tartalmaz – a szokásos konvertálók vagy mindent raszterizálnak, vagy teljesen figyelmen kívül hagyják az aláírást. + +Ebben az útmutatóban egy gyakorlati megoldást mutatunk be a **Aspose.Pdf** .NET-hez: először eltávolítjuk a raszter képeket, miközben egy csak vektoros PDF-et tiszta HTML-re alakítunk, majd megmutatjuk, hogyan **ellenőrizheted a PDF aláírást** (igen, a SHA‑3‑256-ot) és jelenítsd meg az eredményt a konzolon. A végére egy kész C# programod lesz, amely mindkét feladatot elvégzi, valamint néhány tippet a gyakori buktatók elkerüléséhez. + +## Amire szükséged lesz + +- **Aspose.Pdf for .NET** (a legújabb verzió 2026‑04 szerint, pl. 23.12). +- .NET fejlesztői környezet (Visual Studio 2022 vagy VS Code a C# kiegészítővel). +- Két mintapdf: + 1. `vectorOnly.pdf` – csak vektorokat és szöveget tartalmaz, raszter képek nincsenek. + 2. `signed_sha3.pdf` – digitálisan aláírt SHA‑3‑256 hash-szal. + +Nem szükséges további NuGet csomag a `Aspose.Pdf`-n kívül. + +--- + +## 1. lépés: A projekt beállítása és a PDF-ek betöltése + +Hozz létre egy új konzolos alkalmazást, add hozzá az Aspose.Pdf NuGet csomagot, és hozd be a névtereket. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Miért fontos*: A dokumentumok előzetes betöltése lehetővé teszi, hogy újrahasznosítsuk az objektumokat a konvertáláshoz és az aláírás ellenőrzéséhez egyaránt, így alacsony marad a memóriahasználat. + +--- + +## 2. lépés: PDF konvertálása HTML-re raszter képek kihagyásával + +Az Aspose.Pdf `HtmlSaveOptions` osztálya finomhangolt vezérlést biztosít a képek kezeléséhez. A `RasterImagesSavingMode` beállítása `Skip` értékre azt mondja a könyvtárnak, hogy teljesen hagyja figyelmen kívül a raszter képeket – tökéletes egy csak vektoros forráshoz. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Expected output**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Pro tipp*: Ha később be akarod ágyazni a HTML-t egy weboldalba, a generált fájl csak SVG‑t és CSS‑t tartalmaz – nem lesznek nehézkes PNG/JPEG adatok. + +--- + +## 3. lépés: Az aláíráskezelő előkészítése + +Az Aspose.Pdf `PdfFileSignature` osztálya a belépési pont minden digitális aláírással kapcsolatos művelethez. Beolvassa az aláírás szótárát, kinyeri a nevet, és lehetővé teszi a konkrét hash algoritmus használatával történő ellenőrzést. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Miért kulcsfontosságú ez a lépés*: Kezelő nélkül nem tudod felsorolni az aláírásokat, vagy kiválasztani a szükséges hash algoritmust (pl. SHA‑3‑256). + +--- + +## 4. lépés: Az egyes aláírások felsorolása és ellenőrzése SHA‑3‑256 használatával + +A `GetSignNames()` metódus visszaadja a PDF összes aláíráscímkéjét. Iterálj rajtuk, hívd meg a `VerifySignature`‑t a `DigestHashAlgorithm.Sha3_256` paraméterrel, és írd ki az eredményt. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Sample console output**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Különleges eset*: Ha egy aláírás más hash‑t használ (pl. SHA‑256), az ellenőrzés `False` értéket ad vissza. Hozzáadhatsz tartalék ellenőrzést, ha a ciklusban más `DigestHashAlgorithm` értékeket próbálsz. + +--- + +## 5. lépés: Teljes működő példa (az összes kód egy helyen) + +Az alábbiakban a teljes program található, amelyet beilleszthetsz a `Program.cs`‑be. Cseréld le a `YOUR_DIRECTORY`‑t a PDF‑ek tényleges mappájára. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Futtasd a programot (`dotnet run` vagy nyomd meg az **F5**‑öt a Visual Studio‑ban). A konvertálás megerősítését, majd az aláírás ellenőrzésének eredményeit kell látnod. + +--- + +## Gyakori kérdések és megoldások + +| Kérdés | Válasz | +|----------|--------| +| **A HTML még mindig tartalmazza az eredeti betűtípusokat?** | Az Aspose.Pdf alapértelmezés szerint a használt betűtípusokat base‑64 adat‑URI‑ként ágyazza be, így a kimenet helyesen jelenik meg még akkor is, ha a gazdagép nem rendelkezik ezekkel a betűtípusokkal. | +| **Mi van, ha a PDF-nek van vektora *és* képe?** | Tartsd meg a `RasterImagesSavingMode = Skip` beállítást a képek eldobásához, vagy állítsd `EmbedAll`‑ra, ha szükséged van rájuk. A beállítás konverziónként alkalmazható, így két átfutást is végrehajthatsz, ha mindkét változatra szükséged van. | +| **Az aláírásom SHA‑512-et használ — hogyan ellenőrizhetem?** | Cseréld le a `DigestHashAlgorithm.Sha3_256`‑t `DigestHashAlgorithm.Sha512`‑ra. Még az aláírás szótárából is felismerheted az algoritmust, és dinamikusan választhatod. | +| **Van mód a feladó tanúsítványának részleteit lekérni?** | Igen. Az ellenőrzés után hívd meg a `signatureHandler.GetSignatureInfo(signName).Certificate`‑et, hogy lekérd az X.509 tanúsítványt, és megvizsgáld a `Subject` és `Issuer` mezőket. | +| **Mi van, ha a PDF jelszóval védett?** | Töltsd be a `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })` kóddal. A munkafolyamat többi része változatlan marad. | + +## Profi tippek a termelésre kész kódhoz + +1. **PDF-ek megfelelő lezárása** – Tedd a `PdfDocument` példányokat `using` blokkba vagy hívd meg a `Dispose()`‑t a natív erőforrások felszabadításához. +2. **Kötegelt feldolgozás** – Ha tucatnyi PDF-ed van, iterálj egy könyvtáron, tárold az eredményeket CSV‑ben, és párhuzamosítsd a konvertálást a `Parallel.ForEach`‑el. +3. **Naplózás** – Cseréld le a `Console.WriteLine`‑t egy strukturált naplózóval (Serilog, NLog) a jobb nyomon követhetőségért, különösen sok aláírás ellenőrzésekor. +4. **Hibakezelés** – Fogd el az `Aspose.Pdf.Exceptions`‑t a sérült fájlok elegáns kezeléséhez: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Verziókompatibilitás** – Az Aspose.Pdf gyorsan fejlődik. Mindig teszteld a `csproj`‑ban hivatkozott pontos verzióval. A bemutatott API a 23.x és újabb verziókban működik. + +## Összegzés + +Most **PDF-et konvertáltunk HTML-re**, miközben csak a vektorokat és a szöveget őriztük meg, és **ellenőriztük a PDF aláírást** a SHA‑3‑256 algoritmus használatával – mindezt néhány C# sorral. A fő tanulságok: + +- Használd a `HtmlSaveOptions.RasterImagesSavingMode = Skip` beállítást a tiszta, csak vektoros HTML‑hez. +- Használd a `PdfFileSignature` és a `DigestHashAlgorithm.Sha3_256` osztályokat a **pdf digitális aláírásának** megbízható ellenőrzéséhez. + +Innen tovább felfedezheted a kapcsolódó témákat, például a **aspose pdf conversion** PDF‑ek PNG‑re konvertálását, beágyazott fájlok kinyerését, vagy egy webszolgáltatás építését, amely PDF‑eket fogad és ellenőrzött HTML‑részleteket ad vissza. + +Próbáld ki, finomítsd a beállításokat, és tudasd velünk, mit találsz. Boldog kódolást! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hungarian/net/digital-signatures/_index.md b/pdf/hungarian/net/digital-signatures/_index.md index 7f9a25800..58fcfb0ae 100644 --- a/pdf/hungarian/net/digital-signatures/_index.md +++ b/pdf/hungarian/net/digital-signatures/_index.md @@ -59,6 +59,12 @@ Ismerje meg, hogyan tölthet be PDF-et C#-ban, konvertálhatja PDF/X‑4-re, és ### [PDF aláírás ellenőrzése Aspose-szal – PDF konvertálása HTML-re](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Ismerje meg, hogyan ellenőrizheti a PDF aláírását és konvertálhatja a dokumentumot HTML formátumba az Aspose.PDF for .NET használatával. +### [PDF aláírás ellenőrzése és Bates-számozás hozzáadása – Teljes C# útmutató](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Ismerje meg, hogyan ellenőrizheti a PDF aláírását és adhat hozzá Bates-számozást C#-ban az Aspose.PDF for .NET segítségével. + +### [PDF aláírások kinyerése – Aspose C# útmutató](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Ismerje meg, hogyan nyerhet ki aláírásokat PDF-fájlokból C#-ban az Aspose.PDF 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/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/hungarian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..6dac53103 --- /dev/null +++ b/pdf/hungarian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-02 +description: Tanulja meg, hogyan lehet kinyerni az aláírásokat, mezőt hozzáadni, üres + oldalt PDF-hez hozzáadni, widgetet hozzáadni, és megőrizni a PDF átlátszóságát az + Aspose.Pdf C#-ban való használatával. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: hu +og_description: Hogyan lehet aláírásokat kinyerni egy PDF-ből, és kapcsolódó feladatokat + végrehajtani, például mezők, üres oldalak, widgetek hozzáadása, valamint az átlátszóság + megőrzése az Aspose.Pdf segítségével. +og_title: Hogyan nyerjünk ki aláírásokat PDF‑ből – Aspose C# útmutató +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Hogyan nyerjünk ki aláírásokat PDF‑ből – Aspose C# útmutató +url: /hu/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF aláírások kinyerése – Aspose C# útmutató + +**PDF aláírások kinyerése** gyakori követelmény, amikor szerződésfeldolgozást, számla jóváhagyást vagy bármilyen digitális aláírásokra támaszkodó munkafolyamatot automatizál. +Ebben az útmutatóban bemutatjuk a **how to add field**, **add blank page PDF**, **how to add widget**, és **preserve transparency PDF** használatát az Aspose.Pdf .NET könyvtárral. + +Képzelje el, hogy minden este tucatnyi aláírt PDF-et kap; a fájlok kézi megnyitása az aláírások ellenőrzéséhez rémálom lenne. Néhány C# sorral programozottan kiolvashatja az aláírások neveit, megőrizheti az eredeti grafikákat, és még új űrlapmezőkkel is gazdagíthatja a dokumentumot – mindezt anélkül, hogy a meglévő átlátszóságot vagy színprofilokat megsértené. + +> **Mit kap:** egy teljes, futtatható példa, amely PDF-et konvertál PDF/X‑4-re (átlátszóság megőrzése), kinyeri az összes beágyazott aláírás nevét, hozzáad egy üres oldalt, és létrehoz egy szövegmező űrlapmezőt, amely a ugyanazon oldal két helyén jelenik meg. + +## Előkövetelmények + +- .NET 6.0 vagy újabb (a kód .NET Framework‑kel is működik) +- Aspose.Pdf for .NET **v25.2** vagy újabb (szükséges a `GetSignatureNames()`-hez) +- Visual Studio projekt vagy bármely C# IDE +- Három minta PDF egy általad irányított mappában: + - `source.pdf` – bármely PDF, amelyet átlátszóság megőrzése mellett szeretnél konvertálni + - `signed.pdf` – egy PDF, amely már digitális aláírásokat tartalmaz + - (opcionális) egy üres mappa a kimeneti fájlok számára + +> **Pro tipp:** Ha még nincs licencelt példányod, kérhetsz ingyenes ideiglenes licencet az Aspose weboldaláról. Az ingyenes mód tesztelésre használható, de vízjelet ad a dokumentumokhoz. + +## 1. lépés – Átlátszóság megőrzése PDF konvertálásával PDF/X‑4-re + +Az átlátszóság és a beágyazott színprofilok gyakran elvesznek, amikor egy PDF-et laposítasz. A **PDF/X‑4**-re konvertálás megőrzi ezeket a vizuális elemeket, ami elengedhetetlen a nyomtatásra kész dokumentumokhoz. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Miért fontos:** +A PDF/X‑4 az ISO szabvány a grafikai csere PDF-ekhez, amelyek megőrzik az élő átlátszóságot. A `PdfFormatConversionOptions` használatával elkerülheted a gyakori hibát, hogy a transparens objektumok raszterizálódnak, ami drámaian növelheti a fájlméretet és rontja a minőséget. + +## 2. lépés – PDF aláírások kinyerése + +Az Aspose a `GetSignatureNames()` metódust a 25.2-es verzióban vezette be, így az aláírások kinyerése egy soros művelet. A metódus egy tömböt ad vissza a digitális aláírásmezőkhöz rendelt logikai nevekkel. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**Mi várható:** Ha a `signed.pdf` két aláírást tartalmaz, *ManagerSig* és *ClientSig* néven, a konzol a következőt írja ki: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Szélsőséges esetek kezelése:** +- Ha a PDF-nek nincs aláírása, a `GetSignatureNames()` egy üres tömböt ad vissza – kivétel nem keletkezik. +- Ha a PDF aláírásmezői sérültek, a hívást `try/catch` blokkba teheted, és naplózhatod a hibát anélkül, hogy a teljes folyamat leállna. + +## 3. lépés – Üres oldal hozzáadása PDF-hez és több widgettel rendelkező szövegmező létrehozása + +Új oldal hozzáadása egyszerű, de a **how to add field** és **how to add widget** együtt egy kis finomságot igényel. A *widget* egy űrlapmező vizuális megjelenítése; több widgetet is csatolhatsz ugyanahhoz a logikai mezőhöz, így ugyanaz az adat több helyen is megjelenhet. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Miért használjunk több widgetet?** +Tegyük fel, hogy ugyanazt a megjegyzést a szerződés elülső és hátoldalán is meg kell jeleníteni. Ha két widgetet csatolsz ugyanahhoz a mezőhöz, a felhasználó egy helyen végzett módosítása automatikusan frissíti a másikat. + +**Gyakori hibák:** +- Ha elfelejted a mezőt a `newDoc.Form`-hoz adni, a widget láthatatlan lesz a PDF-olvasókban. +- Azonos téglalap koordináták használata mindkét widgethez egymásra helyezi őket – győződj meg róla, hogy a `Rectangle` értékek különböznek. + +## 4. lépés – Minden összeállítása: Teljes, futtatható példa + +Az alábbi egyetlen program, amely a bemutatott sorrendben hajtja végre az összes lépést. Másold be egy új konzolprojektbe, állítsd be az elérési útvonalakat, és futtasd. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Várt kimenet + +A program futtatásakor valami ilyesmit kell látnod: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Nyisd meg a `TextBoxMultipleWidgets.pdf`-et az Adobe Acrobat Readerben; észre fogod venni, hogy két azonos szövegmező van, **Comments** felirattal – az egyik a tetején, a másik egy kicsit alacsonyabban. Az egyikbe gépelve a másik azonnal frissül. + +## Gyakran Ismételt Kérdések (GYIK) + +| Kérdés | Válasz | +|----------|--------| +| **Kinyerhetem a tényleges aláírásbájtokat?** | `GetSignatureNames()` csak a logikai neveket adja vissza. A tanúsítvány vagy aláírás értékének kinyeréséhez `SignatureField` objektumokra van szükség (`document.Form["fieldName"] as SignatureField`). | +| **Működik a PDF/X‑4 konvertálás titkosított PDF-eken?** | Igen, amennyiben a jelszót a `Document.Open(file, password)` hívással adod meg. | +| **Mi a teendő, ha kettőnél több widgetre van szükség?** | Egyszerűen hívd meg a `textBox.Widgets.Add()` metódust minden további `WidgetAnnotation` esetén. | +| **Az üres oldal örökli a méretet az eredeti PDF-ből?** | Az új oldal az alapértelmezett méretet (A4) használja. Szükség esetén átadhatsz egy egyedi méretű `Page` objektumot. | +| **Kompatibilis a kód a .NET Core-ral?** | Természetesen – az Aspose.Pdf platformfüggetlen. Csak hivatkozz a NuGet csomagra a .NET Core projektedben. | + +## Következtetés + +Ebben az útmutatóban bemutattuk, hogyan **kinyerhetünk aláírásokat PDF** fájlokból, miközben lefedtük a **how to add field**, **add blank page PDF**, **how to add widget**, és **preserve transparency PDF** használatát az Aspose.Pdf for C#-vel. Most már egy robusztus, vég‑től‑végig megoldással rendelkezel, amelyet bármely dokumentumfeldolgozó csővezetékbe beilleszthetsz. + +Készen állsz a következő kihívásra? Próbáld meg kombinálni ezeket a technikákat az Aspose OCR moduljával, hogy szkennelt képekből szöveget olvass. + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/hungarian/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..7834aeaa6 --- /dev/null +++ b/pdf/hungarian/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,225 @@ +--- +category: general +date: 2026-04-02 +description: Gyorsan ellenőrizze a PDF aláírást, és tanulja meg, hogyan adjon hozzá + Bates-számozást az Aspose.Pdf használatával. Lépésről‑lépésre kódot és tippeket + tartalmaz. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: hu +og_description: Ellenőrizze gyorsan a PDF-aláírást, és tanulja meg, hogyan adjon hozzá + Bates-számozást az Aspose.Pdf használatával. Kövesse a teljes példát, és kerülje + el a gyakori hibákat. +og_title: PDF aláírás ellenőrzése és Bates-számozás hozzáadása – Teljes C# útmutató +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: PDF aláírás ellenőrzése és Bates-számozás hozzáadása – Teljes C# útmutató +url: /hu/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF-aláírás ellenőrzése és Bates-számozás hozzáadása – Teljes C# útmutató + +Valaha is szükséged volt **PDF-aláírás ellenőrzésére** mielőtt elküldenéd a szerződést, de nem tudtad, melyik API hívást kell használni? Nem vagy egyedül – sok fejlesztő szembesül ezzel a problémával, amikor jogilag kötelező erejű PDF-ekkel dolgozik. Ebben az útmutatóban pontosan végigvezetünk, hogyan **ellenőrizheted a PDF-aláírást** az Aspose.Pdf segítségével, majd megmutatjuk, **hogyan adhatod hozzá a Bates-számozást**, hogy a fájljaid audit‑kész állapotban legyenek. + +Emellett érintjük a **szignatúra programozott ellenőrzését**, lefedjük a **Bates-számozás egy lépésben történő hozzáadását**, és elmagyarázzuk a **check pdf signature** eredményeket, hogy megbízhass a kimenetben. A végére egy futtatható C# konzolalkalmazást kapsz, amely mindkét feladatot elvégzi – nincs rejtély, csak tiszta kód. + +--- + +## Amire szükséged lesz + +- **.NET 6.0** vagy újabb (a példa a .NET Framework 4.7+‑vel is működik) +- **Aspose.Pdf for .NET** NuGet csomag (23.11 vagy újabb verzió) +- Egy aláírt PDF fájl (`signed.pdf`), amelyet ellenőrizni szeretnél +- Egy egyszerű PDF (`input.pdf`), amely a Bates-számokat fogja kapni + +Ha megvannak ezek, már indulhatsz. Nincs szükség extra SDK‑ra, nincs rejtett konfigurációs fájl. + +--- + +## 1. lépés: A projekt beállítása + +Kezdd egy konzolprojekt létrehozásával: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +`Program.cs`‑t nyisd meg, és töröld az alapértelmezett kódot. Mindent a semmiből építünk fel, hogy később egyszerűen be tudjad másolni a végleges verziót. + +--- + +## 2. lépés: PDF-aláírás ellenőrzése + +### Miért fontos az ellenőrzés + +Egy digitális aláírás **kompromittálódhat**, ha az aláírást alátámasztó tanúsítvány visszavonásra került, vagy a dokumentumot az aláírás után módosították. Az Aspose.Pdf egy kényelmes `IsSignatureCompromised` metódust biztosít, amely logikai értéket ad vissza – egyszerű, de a legtöbb auditfolyamat számára elég erős. + +### Kódrészlet + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Magyarázat** + +- A `Document` betölti a PDF-et a memóriába. +- A `PdfFileSignature` körbeveszi a dokumentumot, és aláírással kapcsolatos metódusokat tesz elérhetővé. +- Az `IsSignatureCompromised("Signature1")` ellenőrzi a *Signature1* nevű aláírás integritását. +- A logikai eredmény megmutatja, hogy az aláírás még megbízható-e. + +> **Pro tipp:** Ha nem vagy biztos az aláírás mező nevében, először hívd meg a `pdfSignature.GetSignatureNames()`‑t; ez visszaadja az összes aláírás azonosítójának listáját. + +--- + +## 3. lépés: Bates-számozási beállítások előkészítése + +### Mi az a Bates-számozás? + +A Bates-számok sorozatos azonosítók, amelyeket minden oldalra nyomtatnak egy jogi vagy kriminalisztikai dokumentumban. Megkönnyítik az oldalak hivatkozását a felderítés vagy audit folyamatok során. Az Aspose.Pdf `BatesNumberingOptions` osztálya lehetővé teszi a prefix, a kezdő szám, a számjegyek száma, az igazítás és a margó testreszabását – mindezt egy objektumban. + +### Kód folytatása + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Magyarázat** + +- A `BatesNumberingOptions` központosítja az összes formázási beállítást. +- Az `AddBatesNumbering` automatikusan végigiterál minden oldalon – nincs szükség kézi ciklusra. +- A `Prefix` (`INV-`) és a `StartNumber` (1000) olyan címkéket hoz létre, mint `INV-01000`, `INV-01001`, stb. +- Állítsd a `BottomMargin`‑t, ha a számot magasabbra vagy alacsonyabbra szeretnéd helyezni az oldalon. + +--- + +## 4. lépés: A teljes példa futtatása + +Mentsd a fájlt, majd futtasd: + +```bash +dotnet run +``` + +Két konzolos sort kell látnod: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Ha az első sor `True`‑t ír ki, az aláírás kompromittálódott – ez azt jelenti, hogy a dokumentumot az aláírás után módosították, vagy a tanúsítvány már nem érvényes. Ebben az esetben állítsd le a további feldolgozást. + +--- + +## 5. lépés: Gyakori szélhelyzetek és megoldások + +| Helyzet | Mi figyelendő | Javasolt megoldás | +|-----------|-------------------|---------------| +| **Több aláírás** | `IsSignatureCompromised` csak egy mezőt ellenőriz egyszerre. | Iterálj a `pdfSignature.GetSignatureNames()` listán, és ellenőrizd mindet. | +| **Egyedi aláírásmező név** | A `"Signature1"` használata kivételt okozhat, ha a név eltér. | Először szerezd be a nevek listáját, vagy add meg a pontos nevet, amit az Acrobatban látsz. | +| **Nagy PDF-ek (100+ oldal)** | A Bates-számok hozzáadása nagy memóriaigényű lehet. | Használd a `Document.Save`‑t `SaveOptions`‑szel, amely engedélyezi a streaminget (`PdfSaveOptions { Compress = true }`). | +| **Nem latin karakterek a prefixben** | Néhány betűtípus alapértelmezés szerint nem támogatja a Unicode‑ot. | Állítsd a `pdfWithBates.Font`‑ot egy Unicode‑kompatibilis betűtípusra, például `Arial Unicode MS`. | +| **Bal oldali elhelyezés szükséges** | Az igazítás hard‑coded `Right`‑ra van beállítva. | Módosítsd a `Alignment = HorizontalAlignment.Left` értékre a `BatesNumberingOptions`‑ban. | + +--- + +## 6. lépés: Az eredmény manuális ellenőrzése (opcionális) + +`BatesNumbered.pdf`-t nyisd meg bármely PDF‑nézőben: + +1. Lapozz végig az oldalakon – mindegyiknek a jobb alsó sarokban kell megjelenítenie egy **INV‑01000**‑hez hasonló címkét. +2. Használd az Acrobat **Signature Panel**‑jét, kattints duplán az aláírásra, és ellenőrizd, hogy a státusz megegyezik-e a konzol kimenetével. + +Ha minden egyezik, sikeresen ellenőrizted a **check pdf signature** állapotát, és egy lépésben alkalmaztad a **add bates numbering** funkciót. + +--- + +## Gyakran Ismételt Kérdések + +**K: Ellenőrizhetek aláírást anélkül, hogy betölteném az egész dokumentumot?** +V: Az Aspose.Pdf a háttérben streameli a fájlt, de még mindig szükség van egy `Document` példányra. Nagy fájlok esetén fontold meg a `PdfFileSignature` közvetlen használatát fájl‑stream‑mel a memóriahasználat csökkentése érdekében. + +**K: Szükségem van licencre az Aspose.Pdf‑hez?** +V: A ingyenes értékelés működik, de vízjelet ad hozzá. Éles környezetben megfelelő licencre lesz szükséged; különben a kimeneti PDF-ek az Aspose bannert fogják tartalmazni. + +**K: Mi van, ha csak a dokumentum egy részére szeretnék Bates-számokat hozzáadni?** +V: Használd a `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })`‑t, ahol a tömb tartalmazza a számozandó oldalakat. + +--- + +## Összegzés + +Most már tudod, **hogyan ellenőrizd a PDF-aláírást** az Aspose.Pdf‑vel, érted a logikai eredmény jelentését, és magabiztosan **hozzáadhatod a Bates-számozást** bármely általad kezelt PDF-hez. A teljes, futtatható példa egyesíti mindkét feladatot, egyetlen konzolos eszközt biztosítva, amely ellenőrzi a dokumentum hitelességét, és audit‑kész azonosítókkal látja el. + +Ezután érdemes lehet felfedezni, **hogyan ellenőrizd az aláírást** egy megbízható gyökértár ellen, vagy kísérletezni egyedi **add bates numbering** stílusokkal, például átlós pecsétekkel vagy szekciónkénti prefixekkel. Mindkét téma az általad most elsajátított alapokra épül, és még robusztusabbá teszi a dokumentum‑feldolgozó csővezetékedet. + +Boldog kódolást, és ne feledd – az aláírások ellenőrzése és az oldalak számozása egy könnyű feladat, ha a megfelelő kód a kezedben van! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/hungarian/net/printing-rendering/_index.md index 26f71aeed..2d780a595 100644 --- a/pdf/hungarian/net/printing-rendering/_index.md +++ b/pdf/hungarian/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Ismerje meg, hogyan nyomtathat hatékonyan PDF-fájlok egyes oldalait az Aspose. ### [Egyéni nagyítási tényező beállítása PDF-ekben az Aspose.PDF for .NET használatával - Teljes útmutató](./aspose-pdf-net-set-zoom-factor-pdfs/) Ismerje meg, hogyan állíthat be egyéni nagyítási tényezőt PDF dokumentumokban az Aspose.PDF for .NET használatával. Ez az útmutató a telepítést, a megvalósítás lépéseit és a gyakorlati alkalmazásokat ismerteti. +### [Hogyan renderelj PDF-et C#-ban – Teljes útmutató PNG, HTML és bélyegzéshez](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Ismerje meg, hogyan konvertálhat PDF-et PNG vagy HTML formátumba, és alkalmazhat bélyegzőket C# kóddal az Aspose.PDF for .NET 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/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/hungarian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..b527eb16c --- /dev/null +++ b/pdf/hungarian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-04-02 +description: Hogyan renderelj PDF-et az Aspose.PDF használatával C#-ban. Tanulja meg, + hogyan konvertáljon PDF-et PNG-re, mentse a PDF-et HTML-ként, és hogyan adjon hozzá + automatikusan illeszkedő szövegbélyegzőket hatékonyan. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: hu +og_description: Hogyan rendereljünk PDF-et az Aspose.PDF segítségével C#-ban. Ez az + útmutató bemutatja a PDF PNG formátumba történő renderelését, HTML-ként való mentését, + valamint az automatikusan illeszkedő szövegbélyegzők létrehozását. +og_title: Hogyan renderelj PDF-et C#-ban – PNG, HTML és automatikus illeszkedésű bélyegek +tags: +- Aspose.PDF +- C# +- PDF processing +title: PDF renderelése C#‑ban – Teljes útmutató PNG, HTML és pecsételéshez +url: /hu/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan rendereljünk PDF-et C#‑ban – Teljes útmutató PNG‑hez, HTML‑hez és pecsételéshez + +Gondolkodtál már azon, **hogyan renderelj PDF-et** egy .NET alkalmazásban anélkül, hogy egyetlen glifet is elveszítenél? Lehet, hogy kipróbáltad a gyors `PdfRenderer`‑t, csak hogy hiányzó karaktereket láss, vagy egy éles PNG‑re van szükséged egy bélyegképhez, de a kimenet szaggatottnak tűnik. Tapasztalatom szerint a megfelelő renderelési beállítások és a betűkészlet kezelése a különbséget jelenti egy hibás előnézet és egy pixel‑tökéletes kép között. + +Ebben az útmutatóban három valós példát mutatunk be az Aspose.PDF for .NET‑tel: egy PDF‑oldal PNG‑re renderelése betűkészlet‑elemzés közben, egy `TextStamp` hozzáadása, amely automatikusan átméretezi a betűtípust, valamint egy PDF mentése HTML‑ként a betűkészlet CMap táblája használatával. A végére képes leszel **PDF‑t PNG‑re renderelni**, **PDF‑oldalt PNG‑vé konvertálni**, **PDF‑oldal képet exportálni**, és akár **PDF‑t HTML‑ként menteni** problémamentesen. + +## Prerequisites + +- .NET 6.0 vagy újabb (a kód .NET Framework 4.6+‑on is működik) +- Aspose.PDF for .NET NuGet csomag (`Install-Package Aspose.PDF`) +- Egy PDF fájl komplex betűkészletekkel (pl. `complexFonts.pdf`) a renderelési demóhoz +- Alapvető C# és Visual Studio (vagy bármely kedvenc IDE) ismeretek + +> **Pro tipp:** Ha CI szerveren futtatod, győződj meg róla, hogy az Aspose licencfájl vagy be van ágyazva erőforrásként, vagy környezeti változón keresztül van hivatkozva, hogy elkerüld a kiértékelési vízjeleket. + +--- + +## ## How to Render PDF to PNG with Font Analysis + +### Why analyze fonts? + +Amikor egy PDF egyedi vagy beágyazott betűkészleteket tartalmaz, egy naiv renderelés elhagyhatja azokat a glifeket, amelyeket a renderelő nem tud leképezni. Az `AnalyzeFonts` engedélyezése arra kényszeríti az Aspose‑t, hogy átvizsgálja a betűkészlet‑folyamokat és helyettesítse a hiányzó glifeket, ezzel garantálva egy hű képet. + +### Step‑by‑step implementation + +1. **Hozz létre egy `PngDevice`‑et az `AnalyzeFonts` bekapcsolt állapotban.** +2. **Töltsd be a forrás PDF‑et** a `Document` használatával. +3. **Feldolgozd a kívánt oldalt** és írd a PNG‑t a lemezre. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**Amit látnod kell:** Egy `rendered.png` nevű fájl a `YOUR_DIRECTORY` könyvtárban, amely pontosan úgy néz ki, mint a `complexFonts.pdf` első oldala, beleértve az összes speciális karaktert és diakritikus jelet. + +![Renderelt PDF oldal PNG képként](rendered.png "Renderelt PDF oldal PNG képként") + +#### Common pitfalls & how to avoid them + +- **Hiányzó betűkészletek a szerveren:** Ha a PDF olyan betűkészletekre hivatkozik, amelyek nincsenek beágyazva, helyezd el ezeket a betűkészleteket az alkalmazás keresési útvonalába, vagy engedélyezd a `FontRepository`‑t, hogy egy egyedi mappára mutasson. +- **Nagy PDF‑ek:** Sok oldal renderelése egy ciklusban memóriát fogyaszthat; a `Document` példányokat azonnal szabadítsd fel, vagy használd a bemutatott `using` blokkokat. + +--- + +## ## Adding an Auto‑Fit TextStamp (Render PDF with Dynamic Text) + +### When would you need a dynamically sized stamp? + +Képzeld el, hogy számlákat generálsz, és egy „PAID” (FIZETETT) vízjelet kell ráhelyezned, amely bármely általad választott téglalapba illeszkedik, a szöveg hossza függetlenül. A betűméret kézi kiszámítása hibára hajlamos; az Aspose `AutoAdjustFontSizeToFitStampRectangle` funkciója elvégzi a nehéz munkát. + +### Step‑by‑step implementation + +1. **Állíts be egy `TextStamp`‑et** az automatikus méretezési tulajdonságokkal. +2. **Töltsd be a célnak szánt PDF‑et**, amelyet pecsételni szeretnél. +3. **Add hozzá a pecsétet egy oldalhoz** és mentsd el az eredményt. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Eredmény:** A `stampAutoFit.pdf` a „Important notice” szöveget tartalmazza, amely tökéletesen illeszkedik a 300 × 150 pt téglalapba, függetlenül az eredeti szöveg hosszától. + +#### Edge cases to consider + +- **Nagyon hosszú karakterláncok:** Ha a szöveg a legkisebb betűméret mellett is meghaladja a téglalapot, az Aspose a `WordWrapMode` szerint csonkolja. Előzetesen ellenőrizheted a hosszt, vagy növelheted a téglalap méretét. +- **Több pecsét:** Ugyanazon `TextStamp` példány újrahasználata különböző oldalakon működik, de ne feledd, hogy a pozíció tulajdonságok (`Left`, `Top`) megtartják az utolsó értéküket – szükség szerint állítsd vissza őket. + +--- + +## ## Saving PDF as HTML Using the Font’s CMap Table + +### Why bother with the CMap table? + +Amikor egy PDF‑et HTML‑re konvertálsz, a Unicode leképezés megőrzése kulcsfontosságú a kereshető szöveghez. A CMap‑alapú stratégia arra kényszeríti az Aspose‑t, hogy a betűkészlet belső karaktertérképét részesítse előnyben, ami gyakran pontosabb szövegkinyerést eredményez, mint egy általános kódolás. + +### Step‑by‑step implementation + +1. **Hozz létre `HtmlSaveOptions`‑t** a CMap‑alapú kódolási szabállyal. +2. **Töltsd be a forrás PDF‑et**. +3. **Mentsd HTML‑ként** a beállított opciók használatával. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**Ami megkapod:** Egy mappa (ha a `SplitIntoPages` igaz), amely tartalmazza a `cmapHtml.html` fájlt és a kapcsolódó erőforrásokat. Nyisd meg a HTML‑t egy böngészőben, és észre fogod venni, hogy a kiválasztható, kereshető szöveg szinte tökéletesen megegyezik az eredeti PDF‑el. + +#### Tips for a clean HTML export + +- **Képek vs. vektorok:** Állítsd a `RasterImagesSavingMode`‑t `RasterImagesSavingMode.AsEmbeddedPartsOfPng`‑ra, ha a PNG‑ket részesíted előnyben a JPEG‑ek helyett a tisztább grafikáért. +- **Nagy PDF‑ek:** Használd a `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` beállítást, hogy minden oldal könnyű maradjon. + +--- + +## ## Full Working Example – All Three Scenarios in One Project + +Az alábbi önálló konzolalkalmazás bemutatja a három technikát egymás mellett. Másold be egy új C# konzolprojektbe, add hozzá az Aspose.PDF NuGet csomagot, és állítsd be a fájlútvonalakat. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Futtasd a programot, és megtalálod: + +- `rendered.png` – egy tökéletes kép az első PDF oldalról. +- `stampAutoFit.pdf` – az eredeti PDF egy dinamikusan méretezett „Important notice” pecséttel. +- `cmapHtml.html` (plusz oldal‑specifikus HTML fájlok) – egy HTML verzió, amely megőrzi az eredeti szövegkódolást. + +--- + +## ## Frequently Asked Questions (FAQ) + +**Q: Does `AnalyzeFonts` increase rendering time?** +A: Slightly, because Aspose scans each font stream. The trade‑off is usually worth it for complex PDFs where missing glyphs are unacceptable. + +**Q: Can I render multiple pages in a loop?** +A: Absolutely. Just iterate over `sourcePdf.Pages` and call `pngDevice.Process(page, $"page{page.Number}.png")`. Remember to dispose of each `Document` if you open them separately. + +**Q: What if** + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 44fb8199f..d6078b5c8 100644 --- a/pdf/indonesian/net/conversion-export/_index.md +++ b/pdf/indonesian/net/conversion-export/_index.md @@ -141,7 +141,7 @@ Pelajari cara memotong bagian tertentu dari halaman PDF dan mengubahnya menjadi Pelajari cara mengekspor data dari aplikasi ke PDF secara efisien menggunakan Aspose.PDF untuk .NET. Panduan ini mencakup pengaturan, contoh kode dalam C#, dan fitur-fitur utama. ### [Ekspor Anotasi PDF dengan Aspose.PDF .NET: Panduan Lengkap](./export-annotations-aspose-pdf-net/) -Pelajari cara mengekspor anotasi dari PDF secara efisien menggunakan Aspose.PDF untuk .NET. Panduan ini mencakup penyiapan, penerapan, dan praktik terbaik. +Pelajari cara mengekspor anotasi dari PDF secara efisien menggunakan Aspose.PDF .NET. Panduan ini mencakup penyiapan, penerapan, dan praktik terbaik. ### [Ekspor Data PDF ke XML dengan Aspose.PDF untuk .NET: Panduan Langkah demi Langkah](./export-pdf-data-to-xml-aspose-dotnet-guide/) Pelajari cara mengekspor data formulir PDF secara efisien ke XML terstruktur menggunakan Aspose.PDF untuk .NET, pustaka canggih yang dirancang untuk manipulasi PDF. @@ -186,7 +186,7 @@ Pelajari cara mengonversi dokumen PDF menjadi gambar TIFF biner menggunakan Aspo Pelajari cara mengonversi file PDF ke format EPUB menggunakan Aspose.PDF untuk .NET. Ikuti panduan langkah demi langkah ini untuk meningkatkan penerbitan digital dan aksesibilitas konten. ### [Cara Mengonversi PDF ke TIFF Multi-Halaman Menggunakan Aspose.PDF .NET - Panduan Langkah demi Langkah](./convert-pdf-to-multi-page-tiff-aspose-dotnet/) -Pelajari cara mengonversi PDF menjadi gambar TIFF multi-halaman berkualitas tinggi menggunakan Aspose.PDF untuk .NET. Ikuti panduan langkah demi langkah ini untuk implementasi mudah dalam C#. +Pelajari cara mengonversi PDF menjadi gambar TIFF multi-halaman berkualitas tinggi menggunakan Aspose.PDF untuk .NET. Ikuti panduan langkah demi langkah kami untuk implementasi mudah dalam C#. ### [Cara Mengonversi PDF ke PostScript di C# Menggunakan Aspose.PDF: Panduan Lengkap](./convert-pdf-to-postscript-aspose-csharp/) Pelajari cara mengonversi file PDF ke format PostScript menggunakan Aspose.PDF untuk .NET dengan panduan langkah demi langkah ini. Sempurna untuk kebutuhan pencetakan berkualitas tinggi. @@ -224,6 +224,12 @@ Kuasai konversi PDF ke HTML menggunakan Aspose.PDF untuk .NET. Tingkatkan aksesi ### [Konversi PDF ke HTML dengan Aspose.PDF untuk .NET](./pdf-to-html-conversion-aspose-dot-net/) Tutorial kode untuk Aspose.PDF Net +### [Konversi PDF ke HTML dengan Aspose.PDF .NET: Panduan Lengkap](./aspose-pdf-net-pdf-to-html-conversion/) +Tutorial kode untuk Aspose.PDF Net + +### [Mengonversi PDF ke HTML dan Memverifikasi Tanda Tangan PDF – Panduan Lengkap Aspose .NET](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Panduan lengkap untuk mengonversi PDF ke HTML dan memverifikasi tanda tangan PDF menggunakan Aspose.PDF untuk .NET. + ### [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/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/indonesian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..705a178ed --- /dev/null +++ b/pdf/indonesian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,261 @@ +--- +category: general +date: 2026-04-02 +description: Konversi PDF ke HTML sambil mempertahankan vektor, kemudian verifikasi + tanda tangan PDF menggunakan Aspose PDF. Pelajari konversi Aspose PDF dan periksa + tanda tangan digital PDF dalam C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: id +og_description: Konversi PDF ke HTML sambil mempertahankan vektor dan verifikasi tanda + tangan PDF dengan Aspose PDF. Kode C# langkah demi langkah, tips, dan penanganan + kasus tepi. +og_title: Konversi PDF ke HTML & Verifikasi Tanda Tangan PDF – Tutorial Lengkap Aspose + .NET +tags: +- Aspose.PDF +- C# +- PDF processing +title: Konversi PDF ke HTML dan Verifikasi Tanda Tangan PDF – Panduan Lengkap Aspose + .NET +url: /id/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Mengonversi PDF ke HTML dan Memverifikasi Tanda Tangan PDF – Tutorial Lengkap Aspose .NET + +Pernah membutuhkan untuk **mengonversi PDF ke HTML** tetapi khawatir kehilangan kualitas vektor atau merusak tanda tangan digital? Anda tidak sendirian. Banyak pengembang menemui kendala ketika PDF hanya berisi grafik vektor atau tanda tangan digital berbasis SHA‑3—konverter standar biasanya meraster semua atau mengabaikan tanda tangan sama sekali. + +Dalam panduan ini kami akan menunjukkan solusi praktis menggunakan **Aspose.Pdf** untuk .NET: pertama kami akan menghapus gambar raster sambil mengubah PDF yang hanya berisi vektor menjadi HTML bersih, kemudian kami akan menunjukkan cara **memverifikasi tanda tangan PDF** (ya, yang SHA‑3‑256) dan menampilkan hasilnya di konsol. Pada akhir tutorial Anda akan memiliki program C# siap‑jalankan yang melakukan kedua tugas tersebut, plus beberapa tips untuk menghindari jebakan umum. + +## Apa yang Anda Butuhkan + +- **Aspose.Pdf for .NET** (versi terbaru per 2026‑04, misalnya 23.12). +- Lingkungan pengembangan .NET (Visual Studio 2022 atau VS Code dengan ekstensi C#). +- Dua contoh PDF: + 1. `vectorOnly.pdf` – berisi hanya vektor dan teks, tanpa gambar raster. + 2. `signed_sha3.pdf` – ditandatangani secara digital dengan hash SHA‑3‑256. + +Tidak ada paket NuGet tambahan selain `Aspose.Pdf` yang diperlukan. + +--- + +## Langkah 1: Siapkan Proyek dan Muat PDF + +Buat aplikasi console baru, tambahkan paket NuGet Aspose.Pdf, dan impor namespace yang diperlukan. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Mengapa ini penting*: Memuat dokumen di awal memungkinkan kita menggunakan kembali objek-objek tersebut untuk konversi dan verifikasi tanda tangan, sehingga penggunaan memori tetap rendah. + +--- + +## Langkah 2: Mengonversi PDF ke HTML Sambil Melewatkan Gambar Raster + +`HtmlSaveOptions` milik Aspose.Pdf memberi Anda kontrol detail tentang cara penanganan gambar. Menetapkan `RasterImagesSavingMode` ke `Skip` memberi tahu perpustakaan untuk mengabaikan gambar raster sepenuhnya—sempurna untuk sumber yang hanya berisi vektor. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Output yang diharapkan**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Pro tip*: Jika nanti Anda perlu menyematkan HTML ke dalam halaman web, file yang dihasilkan hanya berisi SVG dan CSS—tanpa blob PNG/JPEG yang besar. + +--- + +## Langkah 3: Siapkan Penangani Tanda Tangan + +Kelas `PdfFileSignature` milik Aspose.Pdf adalah titik masuk untuk semua pekerjaan tanda tangan digital. Kelas ini membaca kamus tanda tangan, mengekstrak nama, dan memungkinkan Anda memverifikasi menggunakan algoritma hash tertentu. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Mengapa langkah ini krusial*: Tanpa penangani ini Anda tidak dapat mendaftar tanda tangan atau memilih algoritma hash yang diperlukan (misalnya SHA‑3‑256). + +--- + +## Langkah 4: Enumerasi dan Verifikasi Setiap Tanda Tangan Menggunakan SHA‑3‑256 + +Metode `GetSignNames()` mengembalikan setiap label tanda tangan dalam PDF. Lakukan iterasi, panggil `VerifySignature` dengan `DigestHashAlgorithm.Sha3_256`, dan cetak hasilnya. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Contoh output konsol**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Kasus tepi*: Jika sebuah tanda tangan menggunakan hash yang berbeda (misalnya SHA‑256) verifikasi akan mengembalikan `False`. Anda dapat menambahkan pemeriksaan cadangan dengan mencoba nilai `DigestHashAlgorithm` lain di dalam loop. + +--- + +## Langkah 5: Contoh Kerja Lengkap (Semua Kode dalam Satu Tempat) + +Berikut adalah program lengkap yang dapat Anda salin‑tempel ke dalam `Program.cs`. Ganti `YOUR_DIRECTORY` dengan folder sebenarnya tempat PDF Anda berada. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Jalankan program (`dotnet run` atau tekan **F5** di Visual Studio). Anda akan melihat konfirmasi konversi diikuti oleh hasil verifikasi tanda tangan. + +--- + +## Pertanyaan Umum & Cara Menanganinya + +| Pertanyaan | Jawaban | +|----------|--------| +| **Apakah HTML masih akan berisi font asli?** | Aspose.Pdf menyematkan font yang digunakan sebagai data URI base‑64 secara default, sehingga output ditampilkan dengan benar meskipun mesin host tidak memiliki font tersebut. | +| **Bagaimana jika PDF saya memiliki vektor *dan* gambar?** | Biarkan `RasterImagesSavingMode = Skip` untuk menghilangkan gambar, atau ubah menjadi `EmbedAll` jika Anda membutuhkannya. Opsi ini bersifat per‑konversi, sehingga Anda dapat menjalankan dua kali proses jika memerlukan kedua versi. | +| **Tanda tangan saya menggunakan SHA‑512—bagaimana cara memverifikasinya?** | Ganti `DigestHashAlgorithm.Sha3_256` dengan `DigestHashAlgorithm.Sha512`. Anda bahkan dapat mendeteksi algoritma dari kamus tanda tangan dan memilih secara dinamis. | +| **Apakah ada cara untuk mendapatkan detail sertifikat penandatangan?** | Ya. Setelah verifikasi, panggil `signatureHandler.GetSignatureInfo(signName).Certificate` untuk mengambil sertifikat X.509 dan memeriksa bidang seperti `Subject` dan `Issuer`. | +| **Bagaimana jika PDF dilindungi password?** | Muat dengan `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. Sisa alur kerja tetap sama. | + +--- + +## Tips Pro untuk Kode Siap Produksi + +1. **Buang PDF dengan Benar** – Bungkus instance `PdfDocument` dalam blok `using` atau panggil `Dispose()` untuk membebaskan sumber daya native. +2. **Pemrosesan Batch** – Jika Anda memiliki puluhan PDF, iterasi melalui sebuah direktori, simpan hasil ke CSV, dan paralelkan konversi dengan `Parallel.ForEach`. +3. **Logging** – Ganti `Console.WriteLine` dengan logger terstruktur (Serilog, NLog) untuk jejak yang lebih baik, terutama saat memverifikasi banyak tanda tangan. +4. **Penanganan Error** – Tangkap `Aspose.Pdf.Exceptions` untuk menangani file korup secara elegan: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Kompatibilitas Versi** – Aspose.Pdf berkembang cepat. Selalu uji dengan versi tepat yang tercantum di `csproj` Anda. API yang ditunjukkan bekerja untuk versi 23.x ke atas. + +--- + +## Kesimpulan + +Kami baru saja **mengonversi PDF ke HTML** sambil mempertahankan hanya vektor dan teks, dan kami **memverifikasi tanda tangan PDF** menggunakan algoritma SHA‑3‑256—semua dengan beberapa baris kode C#. Hal utama yang dapat dipelajari: + +- Gunakan `HtmlSaveOptions.RasterImagesSavingMode = Skip` untuk HTML bersih yang hanya berisi vektor. +- Manfaatkan `PdfFileSignature` dan `DigestHashAlgorithm.Sha3_256` untuk **memeriksa tanda tangan digital PDF** secara andal. + +Dari sini Anda dapat menjelajahi topik terkait seperti **aspose pdf conversion** PDF ke PNG, mengekstrak file tersemat, atau membangun layanan web yang menerima PDF dan mengembalikan potongan HTML yang telah diverifikasi. + +Cobalah, sesuaikan opsi-opsinya, dan beri tahu kami apa yang Anda temukan. Selamat coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/indonesian/net/digital-signatures/_index.md b/pdf/indonesian/net/digital-signatures/_index.md index 9de5e0f7f..707263321 100644 --- a/pdf/indonesian/net/digital-signatures/_index.md +++ b/pdf/indonesian/net/digital-signatures/_index.md @@ -26,6 +26,9 @@ Pelajari cara menandatangani PDF secara digital dengan tampilan khusus menggunak ### [Ekstrak Info Tanda Tangan Digital dari PDF dengan Aspose.PDF](./extract-digital-signature-info-from-pdfs-aspose-pdf/) Tutorial kode untuk Aspose.PDF Net +### [Cara Mengekstrak Tanda Tangan dari PDF – Panduan Aspose C#](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Panduan langkah demi langkah untuk mengekstrak tanda tangan digital dari file PDF menggunakan Aspose.PDF dengan C#. + ### [Cara Mengubah Bahasa Tanda Tangan PDF dengan Aspose.PDF untuk .NET](./change-pdf-signature-language-aspose-net/) Pelajari cara menyesuaikan teks tanda tangan digital dalam PDF menggunakan Aspose.PDF untuk .NET. Sempurna untuk persiapan dan pelokalan dokumen multibahasa. @@ -47,7 +50,6 @@ 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. - ### [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,10 @@ 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. + +### [Verifikasi Tanda Tangan PDF dan Tambahkan Penomoran Bates – Panduan Lengkap C#](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Panduan langkah demi langkah untuk memverifikasi tanda tangan PDF dan menambahkan penomoran Bates menggunakan C# dan Aspose.PDF. + ### [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-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/indonesian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..e9e4f8384 --- /dev/null +++ b/pdf/indonesian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-02 +description: Pelajari cara mengekstrak tanda tangan, menambahkan bidang, menambahkan + halaman kosong PDF, cara menambahkan widget, dan mempertahankan transparansi PDF + menggunakan Aspose.Pdf dalam C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: id +og_description: Cara mengekstrak tanda tangan dari PDF dan melakukan tugas terkait + seperti menambahkan bidang, halaman kosong, widget, serta mempertahankan transparansi + menggunakan Aspose.Pdf. +og_title: Cara Mengekstrak Tanda Tangan dari PDF – Panduan Aspose C# +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Cara Mengekstrak Tanda Tangan dari PDF – Panduan Aspose C# +url: /id/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara Mengekstrak Tanda Tangan dari PDF – Panduan Aspose C# + +**How to extract signatures from a PDF** adalah kebutuhan umum ketika Anda mengotomatisasi pemrosesan kontrak, persetujuan faktur, atau alur kerja apa pun yang bergantung pada tanda tangan digital. +Dalam panduan ini kami juga akan membahas **how to add field**, **add blank page PDF**, **how to add widget**, dan **preserve transparency PDF** menggunakan library Aspose.Pdf untuk .NET. + +Bayangkan Anda menerima puluhan PDF yang sudah ditandatangani setiap malam; membuka setiap file secara manual untuk memverifikasi tanda tangan akan menjadi mimpi buruk. Dengan beberapa baris kode C# Anda dapat secara programatik mengambil nama tanda tangan, menjaga grafik asli tetap utuh, dan bahkan memperkaya dokumen dengan bidang formulir baru—semua tanpa merusak transparansi atau profil warna yang ada. + +> **What you’ll get:** contoh lengkap yang dapat dijalankan yang mengonversi PDF ke PDF/X‑4 (mempertahankan transparansi), mengekstrak setiap nama tanda tangan yang tertanam, menambahkan halaman kosong, dan membuat bidang formulir textbox yang muncul di dua tempat pada halaman yang sama. + +## Prasyarat + +- .NET 6.0 atau lebih baru (kode ini juga berfungsi dengan .NET Framework) +- Aspose.Pdf untuk .NET **v25.2** atau yang lebih baru (dibutuhkan untuk `GetSignatureNames()`) +- Proyek Visual Studio atau IDE C# apa pun +- Tiga contoh PDF dalam folder yang Anda kontrol: + - `source.pdf` – PDF apa pun yang ingin Anda konversi sambil mempertahankan transparansi + - `signed.pdf` – PDF yang sudah berisi tanda tangan digital + - (opsional) folder kosong untuk file output + +> **Pro tip:** Jika Anda belum memiliki salinan berlisensi, Anda dapat meminta lisensi sementara gratis dari situs web Aspose. Mode gratis berfungsi untuk pengujian tetapi menambahkan watermark. + +## Langkah 1 – Mempertahankan Transparansi PDF dengan Mengonversi ke PDF/X‑4 + +Transparansi dan profil warna yang tertanam sering hilang ketika Anda meratakan PDF. Mengonversi ke **PDF/X‑4** menjaga elemen visual tersebut tetap utuh, yang sangat penting untuk dokumen siap cetak. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Why this matters:** +PDF/X‑4 adalah standar ISO untuk PDF pertukaran grafis yang mempertahankan transparansi hidup. Dengan menggunakan `PdfFormatConversionOptions`, Anda menghindari jebakan umum rasterisasi objek transparan, yang dapat secara dramatis meningkatkan ukuran file dan menurunkan kualitas. + +## Langkah 2 – Cara Mengekstrak Tanda Tangan dari PDF + +Aspose memperkenalkan `GetSignatureNames()` pada versi 25.2, menjadikan ekstraksi tanda tangan hanya satu baris kode. Metode ini mengembalikan array nama logis yang diberikan ke setiap bidang tanda tangan digital. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**What to expect:** Jika `signed.pdf` berisi dua tanda tangan bernama *ManagerSig* dan *ClientSig*, konsol akan mencetak: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Edge case handling:** +- Jika PDF tidak memiliki tanda tangan, `GetSignatureNames()` mengembalikan array kosong – tidak ada pengecualian yang dilempar. +- Untuk PDF dengan bidang tanda tangan yang rusak, Anda dapat membungkus pemanggilan dalam `try/catch` dan mencatat kesalahan tanpa menghentikan seluruh proses. + +## Langkah 3 – Tambahkan Halaman Kosong PDF dan Buat TextBox dengan Beberapa Widget + +Menambahkan halaman baru sangat mudah, tetapi **how to add field** dan **how to add widget** secara bersamaan memerlukan sedikit nuansa. Sebuah *widget* adalah representasi visual dari sebuah bidang formulir; Anda dapat melampirkan beberapa widget ke bidang logis yang sama, memungkinkan data yang sama muncul di beberapa lokasi. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Why use multiple widgets?** +Misalkan Anda membutuhkan komentar yang sama muncul di bagian depan dan belakang kontrak. Dengan melampirkan dua widget ke bidang yang sama, setiap perubahan yang dilakukan pengguna di satu lokasi secara otomatis memperbarui yang lain. + +**Common pitfalls:** +- Lupa menambahkan bidang ke `newDoc.Form` akan membuat widget tidak terlihat di penampil PDF. +- Menggunakan koordinat persegi panjang yang identik untuk kedua widget akan menumpuknya satu di atas yang lain—pastikan nilai `Rectangle` berbeda. + +## Langkah 4 – Menggabungkan Semua: Contoh Lengkap yang Dapat Dijalankan + +Berikut adalah satu program yang mengeksekusi setiap langkah sesuai urutan yang disajikan. Salin‑tempelkan ke proyek konsol baru, sesuaikan jalur, dan jalankan. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Output yang Diharapkan + +Saat Anda menjalankan program, Anda akan melihat sesuatu seperti: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Buka `TextBoxMultipleWidgets.pdf` di Adobe Acrobat Reader; Anda akan melihat dua kotak teks identik berlabel **Comments**—satu di dekat bagian atas, satu sedikit lebih rendah. Mengetik di salah satu akan memperbarui yang lain secara instan. + +## Pertanyaan yang Sering Diajukan (FAQ) + +| Question | Answer | +|----------|--------| +| **Can I extract the actual signature bytes?** | `GetSignatureNames()` hanya mengembalikan nama logis. Untuk mengambil sertifikat atau nilai tanda tangan Anda memerlukan objek `SignatureField` (`document.Form["fieldName"] as SignatureField`). | +| **Does PDF/X‑4 conversion work on encrypted PDFs?** | Ya, selama Anda menyediakan kata sandi melalui `Document.Open(file, password)`. | +| **What if I need more than two widgets?** | Cukup panggil `textBox.Widgets.Add()` untuk setiap `WidgetAnnotation` tambahan. | +| **Will the blank page inherit page size from the original PDF?** | Halaman baru menggunakan ukuran default (A4). Anda dapat memberikan objek `Page` dengan dimensi khusus jika diperlukan. | +| **Is the code compatible with .NET Core?** | Tentu saja—Aspose.Pdf bersifat lintas‑platform. Cukup referensikan paket NuGet di proyek .NET Core Anda. | + +## Kesimpulan + +Dalam tutorial ini kami menunjukkan **how to extract signatures from PDF** sekaligus membahas **how to add field**, **add blank page PDF**, **how to add widget**, dan **preserve transparency PDF** menggunakan Aspose.Pdf untuk C#. Anda kini memiliki solusi menyeluruh yang dapat dimasukkan ke dalam pipeline pemrosesan dokumen apa pun. + +Siap untuk tantangan berikutnya? Cobalah menggabungkan teknik ini dengan modul OCR Aspose untuk membaca teks dari dokumen yang dipindai + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/indonesian/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..4dd22c009 --- /dev/null +++ b/pdf/indonesian/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,209 @@ +--- +category: general +date: 2026-04-02 +description: Verifikasi tanda tangan PDF dengan cepat dan pelajari cara menambahkan + penomoran Bates menggunakan Aspose.Pdf. Termasuk kode langkah demi langkah dan tips. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: id +og_description: Verifikasi tanda tangan PDF dengan cepat dan pelajari cara menambahkan + penomoran Bates menggunakan Aspose.Pdf. Ikuti contoh lengkapnya dan hindari jebakan + umum. +og_title: Verifikasi Tanda Tangan PDF dan Tambahkan Penomoran Bates – Panduan Lengkap + C# +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: Verifikasi Tanda Tangan PDF dan Tambahkan Penomoran Bates – Panduan C# Lengkap +url: /id/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Verifikasi Tanda Tangan PDF dan Tambahkan Penomoran Bates – Panduan Lengkap C# + +Pernah perlu **verify PDF signature** sebelum Anda mengirimkan kontrak, tetapi tidak yakin panggilan API mana yang harus digunakan? Anda tidak sendirian—banyak pengembang mengalami hal yang sama saat menangani PDF yang memiliki ikatan hukum. Dalam tutorial ini kami akan menjelaskan secara tepat cara **verify PDF signature** dengan Aspose.Pdf dan kemudian menunjukkan **how to add bates numbering** sehingga file Anda siap audit. + +Kami juga akan membahas **how to verify signature** secara programatis, mencakup **how to add bates** dalam satu proses, dan menjelaskan hasil **check pdf signature** sehingga Anda dapat mempercayai outputnya. Pada akhir tutorial, Anda akan memiliki aplikasi konsol C# yang dapat dijalankan yang melakukan kedua tugas—tanpa misteri, hanya kode yang jelas. + +--- + +## Apa yang Anda Butuhkan + +- **.NET 6.0** atau yang lebih baru (contoh ini juga bekerja dengan .NET Framework 4.7+) +- **Aspose.Pdf for .NET** paket NuGet (versi 23.11 atau lebih baru) +- File PDF yang ditandatangani (`signed.pdf`) yang ingin Anda validasi +- File PDF biasa (`input.pdf`) yang akan menerima nomor Bates + +Jika Anda sudah memiliki semua itu, Anda siap melanjutkan. Tidak perlu SDK tambahan, tidak ada file konfigurasi tersembunyi. + +## Langkah 1: Siapkan Proyek + +Mulailah dengan membuat proyek konsol: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Buka `Program.cs` dan hapus kode default. Kami akan membangun semuanya dari awal sehingga Anda dapat menyalin‑tempel versi final nanti. + +## Langkah 2: Verifikasi Tanda Tangan PDF + +### Mengapa verifikasi penting + +Tanda tangan digital dapat **compromised** jika sertifikat yang mendasarinya dicabut atau dokumen telah diubah setelah penandatanganan. Aspose.Pdf menyediakan metode `IsSignatureCompromised` yang mengembalikan nilai boolean—sederhana, namun cukup kuat untuk sebagian besar alur audit. + +### Potongan Kode + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Explanation** + +- `Document` memuat PDF ke memori. +- `PdfFileSignature` membungkus dokumen dan menyediakan metode terkait tanda tangan. +- `IsSignatureCompromised("Signature1")` memeriksa integritas tanda tangan yang bernama *Signature1*. +- Hasil boolean memberi tahu Anda apakah tanda tangan masih dapat dipercaya. + +> **Pro tip:** Jika Anda tidak yakin dengan nama bidang tanda tangan, panggil `pdfSignature.GetSignatureNames()` terlebih dahulu; itu mengembalikan daftar semua pengidentifikasi tanda tangan. + +## Langkah 3: Siapkan Opsi Penomoran Bates + +### Apa itu penomoran Bates? + +Nomor Bates adalah pengidentifikasi berurutan yang dicetak pada setiap halaman dokumen hukum atau forensik. Mereka memudahkan referensi halaman selama proses penemuan atau audit. `BatesNumberingOptions` milik Aspose.Pdf memungkinkan Anda menyesuaikan awalan, nomor mulai, jumlah digit, perataan, dan margin—semua dalam satu objek. + +### Lanjutan Kode + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Explanation** + +- `BatesNumberingOptions` memusatkan semua pilihan format. +- `AddBatesNumbering` mengiterasi setiap halaman secara otomatis—tidak perlu loop manual. +- `Prefix` (`INV-`) dan `StartNumber` (1000) menghasilkan label seperti `INV-01000`, `INV-01001`, dll. +- Sesuaikan `BottomMargin` jika Anda membutuhkan nomor lebih tinggi atau lebih rendah pada halaman. + +## Langkah 4: Jalankan Contoh Lengkap + +Simpan file, lalu jalankan: + +```bash +dotnet run +``` + +Anda akan melihat dua baris konsol: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Jika baris pertama mencetak `True`, tanda tangan tersebut compromised—artinya dokumen mungkin telah diubah setelah penandatanganan atau sertifikat tidak lagi valid. Dalam kasus ini, hentikan semua proses lanjutan. + +## Langkah 5: Kasus Tepi Umum & Cara Menanganinya + +| Situasi | Hal yang Perlu Diperhatikan | Perbaikan yang Disarankan | +|-----------|-------------------|---------------| +| **Multiple signatures** | `IsSignatureCompromised` hanya memeriksa satu bidang pada satu waktu. | Lakukan loop melalui `pdfSignature.GetSignatureNames()` dan verifikasi masing‑masing. | +| **Custom signature field name** | Menggunakan `"Signature1"` dapat menghasilkan pengecualian jika namanya berbeda. | Ambil daftar nama terlebih dahulu, atau berikan nama tepat yang Anda lihat di Acrobat. | +| **Large PDFs (100+ pages)** | Menambahkan nomor Bates dapat memakan banyak memori. | Gunakan `Document.Save` dengan `SaveOptions` yang mengaktifkan streaming (`PdfSaveOptions { Compress = true }`). | +| **Non‑Latin characters in prefix** | Beberapa font tidak mendukung Unicode secara default. | Setel `pdfWithBates.Font` ke font yang kompatibel Unicode seperti `Arial Unicode MS`. | +| **Need to place numbers on the left** | Perataan dikodekan secara tetap ke `Right`. | Ubah `Alignment = HorizontalAlignment.Left` di `BatesNumberingOptions`. | + +## Langkah 6: Verifikasi Hasil Secara Manual (Opsional) + +Buka `BatesNumbered.pdf` di penampil PDF apa pun: + +1. Lihat setiap halaman—setiap halaman harus menampilkan label seperti **INV‑01000** di pojok kanan‑bawah. +2. Gunakan **Signature Panel** di Acrobat untuk mengklik ganda tanda tangan dan memastikan statusnya cocok dengan output konsol. + +Jika semuanya cocok, Anda telah berhasil memeriksa status **check pdf signature** dan menerapkan **add bates numbering** sekaligus. + +## Pertanyaan yang Sering Diajukan + +**Q: Bisakah saya memverifikasi tanda tangan tanpa memuat seluruh dokumen?** +A: Aspose.Pdf melakukan streaming file di balik layar, tetapi Anda tetap memerlukan instance `Document`. Untuk file yang sangat besar, pertimbangkan menggunakan `PdfFileSignature` secara langsung dengan aliran file untuk mengurangi jejak memori. + +**Q: Apakah saya memerlukan lisensi untuk Aspose.Pdf?** +A: Evaluasi gratis dapat digunakan, tetapi akan menambahkan watermark. Untuk produksi Anda memerlukan lisensi yang tepat; jika tidak, PDF output akan menampilkan banner Aspose. + +**Q: Bagaimana jika saya hanya perlu menambahkan nomor Bates pada sebagian halaman?** +A: Gunakan `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` dimana array tersebut berisi nomor halaman yang ingin Anda beri nomor. + +## Kesimpulan + +Anda sekarang tahu **how to verify PDF signature** dengan Aspose.Pdf, memahami arti hasil boolean, dan dapat dengan yakin **add bates numbering** ke PDF apa pun yang Anda kontrol. Contoh lengkap yang dapat dijalankan menggabungkan kedua tugas, memberikan Anda satu alat konsol yang memeriksa keaslian dokumen dan menandainya dengan identifier siap audit. + +Selanjutnya, Anda dapat menjelajahi **how to verify signature** terhadap penyimpanan root yang tepercaya, atau bereksperimen dengan gaya **add bates numbering** khusus seperti stempel diagonal atau awalan per‑section. Kedua topik tersebut membangun di atas fondasi yang baru saja Anda kuasai, dan akan membuat pipeline pemrosesan dokumen Anda lebih kuat. + +Selamat coding, dan ingat—memeriksa tanda tangan dan menomori halaman sangat mudah setelah Anda memiliki kode yang tepat! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/indonesian/net/printing-rendering/_index.md index a3e0719b3..cf8a37fa0 100644 --- a/pdf/indonesian/net/printing-rendering/_index.md +++ b/pdf/indonesian/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Pelajari cara mencetak halaman tertentu dari PDF secara efisien menggunakan Aspo ### [Mengatur Faktor Zoom Kustom dalam PDF Menggunakan Aspose.PDF untuk .NET - Panduan Lengkap](./aspose-pdf-net-set-zoom-factor-pdfs/) Pelajari cara mengatur faktor zoom khusus dalam dokumen PDF menggunakan Aspose.PDF untuk .NET. Panduan ini mencakup instalasi, langkah-langkah implementasi, dan aplikasi praktis. +### [Cara Merender PDF di C# – Panduan Lengkap untuk PNG, HTML, dan Stamping](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Pelajari cara merender dokumen PDF menjadi gambar PNG, HTML, dan menambahkan stempel menggunakan Aspose.PDF untuk .NET dengan contoh kode C#. + ## Sumber Daya Tambahan - [Dokumentasi Aspose.PDF untuk Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/indonesian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/indonesian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..adf8d1d7c --- /dev/null +++ b/pdf/indonesian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-04-02 +description: Cara merender PDF menggunakan Aspose.PDF di C#. Pelajari cara merender + PDF ke PNG, menyimpan PDF sebagai HTML, dan menambahkan stempel teks yang otomatis + menyesuaikan secara efisien. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: id +og_description: Cara merender PDF menggunakan Aspose.PDF di C#. Panduan ini menunjukkan + cara merender PDF ke PNG, menyimpan sebagai HTML, dan membuat stempel teks yang + otomatis menyesuaikan. +og_title: Cara Merender PDF di C# – PNG, HTML & Stempel Auto‑Fit +tags: +- Aspose.PDF +- C# +- PDF processing +title: Cara Merender PDF di C# – Panduan Lengkap untuk PNG, HTML, dan Stempel +url: /id/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara Merender PDF di C# – Panduan Lengkap ke PNG, HTML & Stamping + +Pernah bertanya-tanya **bagaimana cara merender PDF** dalam aplikasi .NET tanpa kehilangan satu pun glyph? Mungkin Anda mencoba `PdfRenderer` cepat hanya untuk melihat karakter yang hilang, atau Anda membutuhkan PNG yang tajam untuk thumbnail tetapi hasilnya terlihat bergerigi. Menurut pengalaman saya, kombinasi yang tepat antara opsi rendering dan penanganan font membuat perbedaan antara pratinjau yang rusak dan gambar yang pixel‑perfect. + +Dalam tutorial ini kami akan membahas tiga skenario dunia nyata dengan Aspose.PDF untuk .NET: merender halaman PDF ke PNG sambil menganalisis font, menambahkan `TextStamp` yang secara otomatis mengubah ukuran fontnya, dan menyimpan PDF sebagai HTML menggunakan tabel CMap font. Pada akhir tutorial Anda akan dapat **merender PDF ke PNG**, **mengonversi halaman PDF ke PNG**, **mengekspor gambar halaman PDF**, dan bahkan **menyimpan PDF sebagai HTML** tanpa masalah. + +## Prerequisites + +- .NET 6.0 atau lebih baru (kode juga berfungsi pada .NET Framework 4.6+) +- Paket NuGet Aspose.PDF untuk .NET (`Install-Package Aspose.PDF`) +- File PDF dengan font kompleks (misalnya `complexFonts.pdf`) untuk demo rendering +- Familiaritas dasar dengan C# dan Visual Studio (atau IDE apa pun yang Anda sukai) + +> **Pro tip:** Jika Anda berada di server CI, pastikan file lisensi Aspose either embedded as a resource atau direferensikan via environment variable untuk menghindari watermark evaluasi. + +--- + +## ## Cara Merender PDF ke PNG dengan Analisis Font + +### Mengapa menganalisis font? + +Ketika PDF berisi font khusus atau ter-embed, render naïf dapat menghilangkan glyph yang tidak dapat dipetakan oleh renderer. Mengaktifkan `AnalyzeFonts` memaksa Aspose untuk memeriksa aliran font dan menggantikan glyph yang hilang, menjamin gambar yang setia. + +### Implementasi Langkah‑demi‑Langkah + +1. **Buat `PngDevice` dengan `AnalyzeFonts` diaktifkan.** +2. **Muat PDF sumber** menggunakan `Document`. +3. **Proses halaman yang diinginkan** dan tulis PNG ke **disk**. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**Apa yang seharusnya Anda lihat:** File bernama `rendered.png` di `YOUR_DIRECTORY` yang **tampil identik** dengan halaman pertama `complexFonts.pdf`, termasuk **semua karakter khusus dan diakritik**. + +![Halaman PDF yang Dirender sebagai gambar PNG](rendered.png "Halaman PDF yang Dirender sebagai gambar PNG") + +#### Kesalahan umum & cara menghindarinya + +- **Font yang hilang di server:** Jika PDF **menyebut** font yang **tidak** **ter-embed**, letakkan font tersebut di jalur pencarian aplikasi atau aktifkan `FontRepository` untuk mengarah ke folder khusus. +- **PDF besar:** Merender banyak halaman dalam loop dapat mengonsumsi memori; segera dispose setiap instance `Document` atau gunakan blok `using` seperti yang ditunjukkan. + +--- + +## ## Menambahkan TextStamp Auto‑Fit (Merender PDF dengan Teks Dinamis) + +### Kapan Anda memerlukan stamp berukuran dinamis? + +Bayangkan Anda menghasilkan faktur dan perlu menambahkan watermark “PAID” yang cocok dengan persegi panjang apa pun yang Anda pilih, terlepas dari panjang teks. Menghitung ukuran font secara manual rawan kesalahan; `AutoAdjustFontSizeToFitStampRectangle` milik Aspose melakukan pekerjaan berat tersebut. + +### Implementasi Langkah‑demi‑Langkah + +1. **Konfigurasikan `TextStamp`** dengan properti auto‑adjust. +2. **Muat PDF target** yang ingin Anda beri stamp. +3. **Tambahkan stamp ke halaman** dan simpan hasilnya. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Hasil:** `stampAutoFit.pdf` berisi teks “Important notice” yang berukuran sempurna dalam persegi panjang 300 × 150 pt, terlepas dari panjang string asli. + +#### Kasus tepi yang perlu dipertimbangkan + +- **String sangat panjang:** Jika teks melebihi persegi panjang bahkan pada ukuran font terkecil, Aspose akan memotong sesuai `WordWrapMode`. Anda dapat memeriksa panjang terlebih dahulu atau memperbesar ukuran persegi panjang. +- **Multiple stamp:** Menggunakan kembali instance `TextStamp` yang sama pada halaman berbeda berfungsi, tetapi ingat bahwa properti posisi (`Left`, `Top`) menyimpan nilai terakhir—reset sesuai kebutuhan. + +--- + +## ## Menyimpan PDF sebagai HTML Menggunakan Tabel CMap Font + +### Mengapa repot dengan tabel CMap? + +Saat Anda mengonversi PDF ke HTML, mempertahankan pemetaan Unicode sangat penting untuk teks yang dapat dicari. Strategi berbasis CMap memaksa Aspose memprioritaskan peta karakter internal font, yang sering menghasilkan ekstraksi teks yang lebih akurat dibandingkan encoding generik. + +### Implementasi Langkah‑demi‑Langkah + +1. **Buat `HtmlSaveOptions`** dengan aturan encoding berbasis CMap. +2. **Muat PDF sumber**. +3. **Simpan sebagai HTML** menggunakan opsi yang dikonfigurasi. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**Apa yang akan Anda dapatkan:** Sebuah folder (jika `SplitIntoPages` bernilai true) yang berisi `cmapHtml.html` dan sumber daya terkait. Buka HTML di browser dan Anda akan melihat teks yang dapat dipilih dan dicari yang hampir sempurna mencocokkan PDF asli. + +#### Tips untuk ekspor HTML yang bersih + +- **Gambar vs. vektor:** Atur `RasterImagesSavingMode` ke `RasterImagesSavingMode.AsEmbeddedPartsOfPng` jika Anda lebih suka PNG daripada JPEG untuk grafik yang lebih tajam. +- **PDF besar:** Gunakan `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` untuk menjaga setiap halaman tetap ringan. + +--- + +## ## Contoh Kerja Lengkap – Semua Tiga Skenario dalam Satu Proyek + +Berikut adalah aplikasi konsol mandiri yang menunjukkan ketiga teknik secara berdampingan. Salin‑tempel ke proyek konsol C# baru, tambahkan paket NuGet Aspose.PDF, dan sesuaikan jalur file. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Jalankan program, dan Anda akan menemukan: + +- `rendered.png` – gambar sempurna **dari halaman pertama PDF**. +- `stampAutoFit.pdf` – PDF asli dengan stamp “Important notice” berukuran dinamis. +- `cmapHtml.html` (plus file HTML per halaman) – versi HTML yang **mempertahankan encoding teks asli**. + +--- + +## ## Pertanyaan yang Sering Diajukan (FAQ) + +**T: Apakah `AnalyzeFonts` meningkatkan waktu rendering?** +J: Sedikit, karena Aspose memindai setiap aliran font. Pertukaran ini biasanya sepadan untuk PDF kompleks di mana glyph yang hilang tidak dapat diterima. + +**T: Bisakah saya merender banyak halaman dalam loop?** +J: Tentu saja. Cukup iterasi melalui `sourcePdf.Pages` dan panggil `pngDevice.Process(page, $"page{page.Number}.png")`. Ingat untuk dispose setiap `Document` jika Anda membukanya secara terpisah. + +**T: Bagaimana jika** + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 88b3c12fe..ad726a5af 100644 --- a/pdf/italian/net/conversion-export/_index.md +++ b/pdf/italian/net/conversion-export/_index.md @@ -227,6 +227,9 @@ 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. +### [Converti PDF in HTML e verifica la firma PDF – Guida completa Aspose .NET](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Scopri come convertire PDF in HTML e verificare le firme PDF con Aspose.PDF per .NET, con esempi di codice dettagliati. + ## Risorse aggiuntive - [Aspose.PDF per la documentazione di rete](https://docs.aspose.com/pdf/net/) diff --git a/pdf/italian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/italian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..7614b4019 --- /dev/null +++ b/pdf/italian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,259 @@ +--- +category: general +date: 2026-04-02 +description: Converti PDF in HTML mantenendo i vettori, poi verifica la firma PDF + usando Aspose PDF. Impara la conversione di PDF con Aspose e controlla la firma + digitale del PDF in C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: it +og_description: Converti PDF in HTML preservando i vettori e verifica la firma PDF + con Aspose PDF. Codice C# passo‑passo, consigli e gestione dei casi limite. +og_title: Converti PDF in HTML e verifica la firma PDF – Tutorial completo Aspose + .NET +tags: +- Aspose.PDF +- C# +- PDF processing +title: Converti PDF in HTML e verifica la firma PDF – Guida completa Aspose .NET +url: /it/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Converti PDF in HTML e Verifica la Firma PDF – Tutorial Completo Aspose .NET + +Hai mai dovuto **convertire PDF in HTML** temendo di perdere la qualità vettoriale o di rompere le firme digitali? Non sei l'unico. Molti sviluppatori si trovano in difficoltà quando un PDF contiene solo grafica vettoriale o una firma digitale basata su SHA‑3: i convertitori standard o rasterizzano tutto o ignorano completamente la firma. + +In questa guida percorreremo una soluzione pratica usando **Aspose.Pdf** per .NET: prima rimuoveremo le immagini raster trasformando un PDF solo vettoriale in HTML pulito, poi ti mostreremo come **verificare la firma PDF** (sì, quella SHA‑3‑256) e visualizzare il risultato nella console. Alla fine avrai un programma C# pronto all'uso che esegue entrambe le operazioni, più alcuni consigli per evitare gli errori più comuni. + +## Cosa Ti Serve + +- **Aspose.Pdf per .NET** (l'ultima versione al 2026‑04, ad es. 23.12). +- Un ambiente di sviluppo .NET (Visual Studio 2022 o VS Code con l'estensione C#). +- Due PDF di esempio: + 1. `vectorOnly.pdf` – contiene solo vettori e testo, nessuna immagine raster. + 2. `signed_sha3.pdf` – firmato digitalmente con hash SHA‑3‑256. + +Non sono necessari altri pacchetti NuGet oltre a `Aspose.Pdf`. + +--- + +## Passo 1: Configura il Progetto e Carica i PDF + +Crea una nuova app console, aggiungi il NuGet Aspose.Pdf e importa i namespace necessari. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Perché è importante*: Caricare i documenti in anticipo ci permette di riutilizzare gli oggetti sia per la conversione sia per la verifica della firma, mantenendo basso l'utilizzo di memoria. + +--- + +## Passo 2: Converti PDF in HTML Saltando le Immagini Raster + +Le `HtmlSaveOptions` di Aspose.Pdf offrono un controllo granulare su come gestire le immagini. Impostare `RasterImagesSavingMode` su `Skip` indica alla libreria di ignorare completamente le immagini raster—perfetto per una sorgente solo vettoriale. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Output previsto**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Consiglio*: Se in seguito devi incorporare l'HTML in una pagina web, il file generato contiene solo SVG e CSS—nessun blob PNG/JPEG ingombrante. + +--- + +## Passo 3: Prepara il Gestore della Firma + +La classe `PdfFileSignature` di Aspose.Pdf è il punto di ingresso per qualsiasi operazione di firma digitale. Legge il dizionario della firma, estrae il nome e consente di verificare usando un algoritmo di hash specifico. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Perché questo passo è cruciale*: Senza il gestore non è possibile elencare le firme né scegliere l'algoritmo di hash necessario (ad es. SHA‑3‑256). + +--- + +## Passo 4: Elenca e Verifica Ogni Firma Usando SHA‑3‑256 + +Il metodo `GetSignNames()` restituisce tutte le etichette di firma presenti nel PDF. Scorri l'elenco, chiama `VerifySignature` con `DigestHashAlgorithm.Sha3_256` e stampa il risultato. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Esempio di output nella console**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Caso limite*: Se una firma utilizza un hash diverso (ad es. SHA‑256) la verifica restituirà `False`. Puoi aggiungere un controllo di fallback provando altri valori di `DigestHashAlgorithm` all'interno del ciclo. + +--- + +## Passo 5: Esempio Completo (Tutto il Codice in Un Unico File) + +Di seguito trovi il programma completo da copiare‑incollare in `Program.cs`. Sostituisci `YOUR_DIRECTORY` con la cartella reale dove risiedono i tuoi PDF. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Esegui il programma (`dotnet run` o premi **F5** in Visual Studio). Dovresti vedere la conferma della conversione seguita dai risultati della verifica della firma. + +--- + +## Domande Frequenti & Come Risolverle + +| Domanda | Risposta | +|----------|----------| +| **L'HTML conterrà ancora i font originali?** | Aspose.Pdf incorpora i font usati come URI base‑64 di default, quindi l'output viene renderizzato correttamente anche se il computer host non dispone di quei font. | +| **E se il mio PDF contiene sia vettori *che* immagini?** | Mantieni `RasterImagesSavingMode = Skip` per eliminare le immagini, oppure passa a `EmbedAll` se ti servono. L'opzione è per conversione, quindi puoi eseguire due passaggi se ti servono entrambe le versioni. | +| **La mia firma usa SHA‑512—come la verifico?** | Sostituisci `DigestHashAlgorithm.Sha3_256` con `DigestHashAlgorithm.Sha512`. Puoi anche rilevare l'algoritmo dal dizionario della firma e scegliere dinamicamente. | +| **È possibile ottenere i dettagli del certificato del firmatario?** | Sì. Dopo la verifica, chiama `signatureHandler.GetSignatureInfo(signName).Certificate` per recuperare il certificato X.509 e ispezionare campi come `Subject` e `Issuer`. | +| **E se il PDF è protetto da password?** | Caricalo con `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. Il resto del flusso rimane invariato. | + +--- + +## Consigli Pro per Codice Pronto alla Produzione + +1. **Dispose dei PDF Correttamente** – Avvolgi le istanze di `PdfDocument` in un blocco `using` o chiama `Dispose()` per liberare le risorse native. +2. **Elaborazione in Batch** – Se hai decine di PDF, itera su una cartella, salva i risultati in un CSV e parallelizza la conversione con `Parallel.ForEach`. +3. **Logging** – Sostituisci `Console.WriteLine` con un logger strutturato (Serilog, NLog) per una migliore tracciabilità, soprattutto quando verifichi molte firme. +4. **Gestione degli Errori** – Cattura le `Aspose.Pdf.Exceptions` per gestire file corrotti in modo elegante: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Compatibilità Versione** – Aspose.Pdf evolve rapidamente. Testa sempre con la versione esatta indicata nel tuo `csproj`. L'API mostrata funziona per la 23.x e successive. + +--- + +## Conclusione + +Abbiamo appena **convertito PDF in HTML** preservando solo vettori e testo, e abbiamo **verificato la firma PDF** usando l'algoritmo SHA‑3‑256—tutto con poche righe di C#. I punti chiave sono: + +- Usa `HtmlSaveOptions.RasterImagesSavingMode = Skip` per ottenere HTML vettoriale pulito. +- Sfrutta `PdfFileSignature` e `DigestHashAlgorithm.Sha3_256` per **controllare affidabilmente la firma digitale del PDF**. + +Da qui puoi esplorare argomenti correlati come **aspose pdf conversion** da PDF a PNG, l'estrazione di file incorporati, o la creazione di un servizio web che accetta PDF e restituisce snippet HTML verificati. + +Provalo, modifica le opzioni e facci sapere cosa scopri. Buon coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/italian/net/digital-signatures/_index.md b/pdf/italian/net/digital-signatures/_index.md index 6d828e358..13bf3115c 100644 --- a/pdf/italian/net/digital-signatures/_index.md +++ b/pdf/italian/net/digital-signatures/_index.md @@ -62,6 +62,12 @@ 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. +### [Verifica la firma PDF e aggiungi la numerazione Bates – Guida completa C#](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Scopri come verificare la firma PDF e aggiungere la numerazione Bates usando C# con Aspose.PDF. + +### [Come estrarre le firme da PDF – Guida Aspose C#](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Scopri come estrarre le firme digitali dai PDF con Aspose.PDF per .NET usando C#, con esempi di codice chiari e pratici. + ## 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-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/italian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..62b5b50f3 --- /dev/null +++ b/pdf/italian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-02 +description: Impara come estrarre firme, aggiungere campi, aggiungere una pagina vuota + al PDF, come aggiungere widget e preservare la trasparenza del PDF usando Aspose.Pdf + in C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: it +og_description: Come estrarre le firme da un PDF ed eseguire operazioni correlate + come aggiungere campi, pagine vuote, widget e preservare la trasparenza usando Aspose.Pdf. +og_title: Come estrarre le firme da PDF – Guida Aspose C# +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Come estrarre le firme da PDF – Guida Aspose C# +url: /it/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come estrarre firme da PDF – Guida Aspose C# + +**How to extract signatures from a PDF** è una necessità comune quando si automatizzano processi di contratti, approvazioni di fatture o qualsiasi flusso di lavoro che si basa su firme digitali. +In questa guida vedremo anche **how to add field**, **add blank page PDF**, **how to add widget** e **preserve transparency PDF** usando la libreria Aspose.Pdf per .NET. + +Immagina di ricevere dozzine di PDF firmati ogni notte; aprire manualmente ogni file per verificare le firme sarebbe un incubo. Con poche righe di codice C# puoi estrarre programmaticamente i nomi delle firme, mantenere intatti i grafici originali e persino arricchire il documento con nuovi campi modulo—tutto senza rompere la trasparenza o i profili colore esistenti. + +> **What you’ll get:** un esempio completo e funzionante che converte un PDF in PDF/X‑4 (preservando la trasparenza), estrae ogni nome di firma incorporato, aggiunge una pagina vuota e crea un campo modulo textbox che appare in due posizioni sulla stessa pagina. + +## Prerequisiti + +- .NET 6.0 o successivo (il codice funziona anche con .NET Framework) +- Aspose.Pdf per .NET **v25.2** o più recente (necessario per `GetSignatureNames()`) +- Un progetto Visual Studio o qualsiasi IDE C# +- Tre PDF di esempio in una cartella di tua scelta: + - `source.pdf` – qualsiasi PDF che vuoi convertire mantenendo la trasparenza + - `signed.pdf` – un PDF che contiene già firme digitali + - (opzionale) una cartella vuota per i file di output + +> **Pro tip:** Se non hai ancora una copia con licenza, puoi richiedere una licenza temporanea gratuita dal sito di Aspose. La modalità gratuita funziona per i test ma aggiunge una filigrana. + +## Passo 1 – Preserve Transparency PDF by Converting to PDF/X‑4 + +La trasparenza e i profili colore incorporati spesso si perdono quando si appiattisce un PDF. Convertire in **PDF/X‑4** mantiene quegli elementi visivi intatti, il che è fondamentale per documenti pronti per la stampa. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Why this matters:** +PDF/X‑4 è lo standard ISO per PDF di scambio grafico che conservano la trasparenza attiva. Utilizzando `PdfFormatConversionOptions`, eviti la comune trappola di rasterizzare oggetti trasparenti, il che può aumentare drasticamente le dimensioni del file e degradare la qualità. + +## Passo 2 – How to Extract Signatures from a PDF + +Aspose ha introdotto `GetSignatureNames()` nella versione 25.2, rendendo l'estrazione delle firme una singola riga di codice. Il metodo restituisce un array dei nomi logici assegnati a ciascun campo firma digitale. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**What to expect:** Se `signed.pdf` contiene due firme chiamate *ManagerSig* e *ClientSig*, la console stamperà: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Edge case handling:** +- Se il PDF non contiene firme, `GetSignatureNames()` restituisce un array vuoto – non viene lanciata alcuna eccezione. +- Per PDF con campi firma corrotti, puoi avvolgere la chiamata in un `try/catch` e registrare l'errore senza interrompere l'intero processo. + +## Passo 3 – Add Blank Page PDF and Create a TextBox with Multiple Widgets + +Aggiungere una nuova pagina è semplice, ma **how to add field** e **how to add widget** insieme richiedono un po' di attenzione. Un *widget* è la rappresentazione visiva di un campo modulo; puoi collegare più widget allo stesso campo logico, consentendo agli stessi dati di apparire in più posizioni. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Why use multiple widgets?** +Supponi di dover far apparire lo stesso commento sia sul fronte sia sul retro di un contratto. Collegando due widget allo stesso campo, qualsiasi modifica l'utente effettui in una posizione aggiorna automaticamente l'altra. + +**Common pitfalls:** +- Dimenticare di aggiungere il campo a `newDoc.Form` renderà il widget invisibile nei visualizzatori PDF. +- Usare coordinate rettangolari identiche per entrambi i widget li sovrapporrà—assicurati che i valori di `Rectangle` siano diversi. + +## Passo 4 – Putting It All Together: A Full, Runnable Example + +Di seguito trovi un unico programma che esegue tutti i passaggi nell'ordine presentato. Copialo in un nuovo progetto console, regola i percorsi e avvialo. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Output previsto + +Quando esegui il programma dovresti vedere qualcosa di simile: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Apri `TextBoxMultipleWidgets.pdf` in Adobe Acrobat Reader; noterai due caselle di testo identiche etichettate **Comments**—una vicino alla parte superiore, l'altra un po' più in basso. Digitare in una aggiorna l'altra istantaneamente. + +## Domande frequenti (FAQ) + +| Domanda | Risposta | +|----------|----------| +| **Posso estrarre i byte effettivi della firma?** | `GetSignatureNames()` restituisce solo i nomi logici. Per ottenere il certificato o il valore della firma devi usare gli oggetti `SignatureField` (`document.Form["fieldName"] as SignatureField`). | +| **La conversione PDF/X‑4 funziona su PDF criptati?** | Sì, purché fornisci la password tramite `Document.Open(file, password)`. | +| **E se avessi bisogno di più di due widget?** | Basta chiamare `textBox.Widgets.Add()` per ogni ulteriore `WidgetAnnotation`. | +| **La pagina vuota erediterà le dimensioni dalla PDF originale?** | La nuova pagina utilizza la dimensione predefinita (A4). Puoi passare un oggetto `Page` con dimensioni personalizzate se necessario. | +| **Il codice è compatibile con .NET Core?** | Assolutamente—Aspose.Pdf è cross‑platform. Basta aggiungere il pacchetto NuGet al tuo progetto .NET Core. | + +## Conclusione + +In questo tutorial abbiamo dimostrato **how to extract signatures from PDF** mantenendo anche **how to add field**, **add blank page PDF**, **how to add widget** e **preserve transparency PDF** usando Aspose.Pdf per C#. Ora disponi di una soluzione solida end‑to‑end che puoi inserire in qualsiasi pipeline di elaborazione documenti. + +Pronto per la prossima sfida? Prova a combinare queste tecniche con il modulo OCR di Aspose per leggere il testo da documenti scansionati + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/italian/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..710d840ad --- /dev/null +++ b/pdf/italian/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,220 @@ +--- +category: general +date: 2026-04-02 +description: Verifica rapidamente la firma PDF e scopri come aggiungere la numerazione + Bates usando Aspose.Pdf. Include codice passo‑passo e consigli. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: it +og_description: Verifica rapidamente la firma PDF e scopri come aggiungere la numerazione + Bates usando Aspose.Pdf. Segui l'esempio completo ed evita gli errori più comuni. +og_title: Verifica della firma PDF e aggiungi la numerazione Bates – Guida completa + C# +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: Verifica la firma PDF e aggiungi la numerazione Bates – Guida completa C# +url: /it/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Verifica la firma PDF e aggiungi la numerazione Bates – Guida completa C# + +Ti è mai capitato di dover **verificare la firma PDF** prima di inviare un contratto, ma non eri sicuro di quale chiamata API utilizzare? Non sei solo: molti sviluppatori incontrano questo ostacolo quando gestiscono PDF legalmente vincolanti. In questo tutorial ti mostreremo passo passo come **verificare la firma PDF** con Aspose.Pdf e poi ti spiegheremo **come aggiungere la numerazione Bates** affinché i tuoi file siano pronti per l’audit. + +Tratteremo anche **come verificare la firma** programmaticamente, copriremo **come aggiungere Bates** in un unico passaggio e spiegheremo i risultati di **check pdf signature** così potrai fidarti dell'output. Alla fine avrai un'app console C# eseguibile che esegue entrambe le operazioni—senza misteri, solo codice chiaro. + +--- + +## Di cosa avrai bisogno + +- **.NET 6.0** o versioni successive (l'esempio funziona anche con .NET Framework 4.7+) +- **Aspose.Pdf for .NET** pacchetto NuGet (versione 23.11 o successiva) +- Un file PDF firmato (`signed.pdf`) che desideri convalidare +- Un PDF semplice (`input.pdf`) che riceverà i numeri Bates + +Se hai tutto questo, sei pronto per partire. Nessun SDK aggiuntivo, nessun file di configurazione nascosto. + +--- + +## Passo 1: Configura il progetto + +Inizia creando un progetto console: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Apri `Program.cs` e rimuovi il codice predefinito. Costruiremo tutto da zero così potrai copiare‑incollare la versione finale in seguito. + +--- + +## Passo 2: Verifica la firma PDF + +### Perché la verifica è importante + +Una firma digitale può essere **compromessa** se il certificato sottostante è revocato o se il documento è stato manomesso dopo la firma. Aspose.Pdf fornisce il comodo metodo `IsSignatureCompromised` che restituisce un valore booleano—semplice, ma sufficientemente potente per la maggior parte delle pipeline di audit. + +### Frammento di codice + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Spiegazione** + +- `Document` carica il PDF in memoria. +- `PdfFileSignature` avvolge il documento e espone i metodi relativi alle firme. +- `IsSignatureCompromised("Signature1")` verifica l'integrità della firma denominata *Signature1*. +- Il risultato booleano indica se la firma è ancora affidabile. + +> **Consiglio:** Se non sei sicuro del nome del campo firma, chiama prima `pdfSignature.GetSignatureNames()`; restituisce un elenco di tutti gli identificatori delle firme. + +--- + +## Passo 3: Prepara le opzioni di numerazione Bates + +### Cos'è la numerazione Bates? + +I numeri Bates sono identificatori sequenziali stampati su ogni pagina di un documento legale o forense. Facilitano il riferimento alle pagine durante le fasi di scoperta o di audit. `BatesNumberingOptions` di Aspose.Pdf ti consente di personalizzare prefisso, numero iniziale, conteggio cifre, allineamento e margine—tutto in un unico oggetto. + +### Continuazione del codice + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Spiegazione** + +- `BatesNumberingOptions` centralizza tutte le scelte di formattazione. +- `AddBatesNumbering` itera automaticamente su ogni pagina—non è necessario un ciclo manuale. +- Il `Prefix` (`INV-`) e `StartNumber` (1000) generano etichette come `INV-01000`, `INV-01001`, ecc. +- Regola `BottomMargin` se desideri posizionare il numero più in alto o più in basso sulla pagina. + +--- + +## Passo 4: Esegui l'esempio completo + +Salva il file, poi esegui: + +```bash +dotnet run +``` + +Dovresti vedere due righe nella console: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Se la prima riga stampa `True`, la firma è compromessa—il che significa che il documento potrebbe essere stato modificato dopo la firma o che il certificato non è più valido. In tal caso, interrompi qualsiasi elaborazione a valle. + +--- + +## Passo 5: Casi limite comuni e come gestirli + +| Situazione | Cosa controllare | Correzione suggerita | +|------------|------------------|----------------------| +| **Firme multiple** | `IsSignatureCompromised` controlla solo un campo alla volta. | Itera su `pdfSignature.GetSignatureNames()` e verifica ciascuna. | +| **Nome campo firma personalizzato** | Usare `"Signature1"` può generare un'eccezione se il nome è diverso. | Recupera prima l'elenco dei nomi, oppure passa il nome esatto che vedi in Acrobat. | +| **PDF di grandi dimensioni (100+ pagine)** | Aggiungere numeri Bates può richiedere molta memoria. | Usa `Document.Save` con `SaveOptions` che abilitano lo streaming (`PdfSaveOptions { Compress = true }`). | +| **Caratteri non latini nel prefisso** | Alcuni font non supportano Unicode di default. | Imposta `pdfWithBates.Font` su un font compatibile Unicode come `Arial Unicode MS`. | +| **Necessità di posizionare i numeri a sinistra** | L'allineamento è impostato rigidamente a `Right`. | Modifica `Alignment = HorizontalAlignment.Left` in `BatesNumberingOptions`. | + +--- + +## Passo 6: Verifica manualmente il risultato (opzionale) + +Apri `BatesNumbered.pdf` in qualsiasi visualizzatore PDF: + +1. Sfoglia le pagine—ognuna dovrebbe mostrare un'etichetta come **INV‑01000** nell'angolo in basso a destra. +2. Usa il **Pannello firme** di Acrobat per fare doppio clic sulla firma e confermare che lo stato corrisponda all'output della console. + +Se tutto corrisponde, hai verificato con successo lo stato di **check pdf signature** e applicato **add bates numbering** in un unico passaggio. + +## Domande frequenti + +**D: Posso verificare una firma senza caricare l'intero documento?** +R: Aspose.Pdf trasmette il file in streaming internamente, ma è comunque necessario un'istanza di `Document`. Per file molto grandi, considera di usare direttamente `PdfFileSignature` con uno stream di file per ridurre l'utilizzo di memoria. + +**D: È necessaria una licenza per Aspose.Pdf?** +R: Una valutazione gratuita funziona, ma aggiunge una filigrana. Per la produzione è consigliata una licenza adeguata; altrimenti i PDF di output conterranno il banner Aspose. + +**D: E se devo aggiungere numeri Bates solo a un sottoinsieme di pagine?** +R: Usa `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` dove l'array elenca i numeri di pagina da numerare. + +## Conclusione + +Ora sai **come verificare la firma PDF** con Aspose.Pdf, comprendi il significato del risultato booleano e puoi aggiungere con sicurezza **bates numbering** a qualsiasi PDF di tua gestione. L'esempio completo, eseguibile, combina entrambe le operazioni, fornendoti un unico strumento console che verifica l'autenticità di un documento e lo timbra con identificatori pronti per l'audit. + +Successivamente, potresti approfondire **come verificare la firma** rispetto a un archivio di autorità di certificazione attendibile, o sperimentare stili personalizzati di **add bates numbering** come timbri diagonali o prefissi per sezione. Entrambi gli argomenti si basano sulle fondamenta appena acquisite e renderanno la tua pipeline di elaborazione documenti ancora più solida. + +Buon coding, e ricorda—verificare le firme e numerare le pagine è un gioco da ragazzi una volta che hai il codice giusto a disposizione! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/italian/net/printing-rendering/_index.md index 55605b74f..176f74d65 100644 --- a/pdf/italian/net/printing-rendering/_index.md +++ b/pdf/italian/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Scopri come stampare in modo efficiente pagine specifiche di un PDF utilizzando ### [Impostare un fattore di zoom personalizzato nei PDF utilizzando Aspose.PDF per .NET - Una guida completa](./aspose-pdf-net-set-zoom-factor-pdfs/) Scopri come impostare un fattore di zoom personalizzato nei documenti PDF utilizzando Aspose.PDF per .NET. Questa guida illustra l'installazione, le fasi di implementazione e le applicazioni pratiche. +### [Come eseguire il rendering di PDF in C# – Guida completa a PNG, HTML e Stamping](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Scopri come convertire PDF in PNG, generare HTML e applicare filigrane usando Aspose.PDF per .NET in C#. + ## Risorse aggiuntive - [Aspose.PDF per la documentazione di rete](https://docs.aspose.com/pdf/net/) diff --git a/pdf/italian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/italian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..90dda73eb --- /dev/null +++ b/pdf/italian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-04-02 +description: Come rendere PDF usando Aspose.PDF in C#. Impara a convertire PDF in + PNG, salvare PDF come HTML e aggiungere timbri di testo auto‑adattabili in modo + efficiente. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: it +og_description: Come rendere PDF usando Aspose.PDF in C#. Questa guida mostra come + convertire PDF in PNG, salvare come HTML e creare timbri di testo auto‑adattabili. +og_title: Come renderizzare PDF in C# – PNG, HTML e timbri Auto‑Fit +tags: +- Aspose.PDF +- C# +- PDF processing +title: Come renderizzare PDF in C# – Guida completa a PNG, HTML e Marcatura +url: /it/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come rendere PDF in C# – Guida completa a PNG, HTML e Stamping + +Ti sei mai chiesto **come rendere PDF** in un'applicazione .NET senza perdere neanche un glifo? Forse hai provato un veloce `PdfRenderer` solo per vedere caratteri mancanti, o ti serve un PNG nitido per una miniatura ma l'output appare seghettato. Nella mia esperienza, la giusta combinazione di opzioni di rendering e gestione dei font fa la differenza tra un'anteprima rotta e un'immagine pixel‑perfect. + +In questo tutorial percorreremo tre scenari reali con Aspose.PDF per .NET: renderizzare una pagina PDF in PNG analizzando i font, aggiungere un `TextStamp` che ridimensiona automaticamente il suo font, e salvare un PDF come HTML usando la tabella CMap del font. Alla fine sarai in grado di **renderizzare PDF in PNG**, **convertire pagina PDF in PNG**, **esportare immagine della pagina PDF**, e persino **salvare PDF come HTML** senza problemi. + +## Prerequisiti + +- .NET 6.0 o successivo (il codice funziona anche su .NET Framework 4.6+) +- Pacchetto NuGet Aspose.PDF per .NET (`Install-Package Aspose.PDF`) +- Un file PDF con font complessi (ad es. `complexFonts.pdf`) per la demo di rendering +- Familiarità di base con C# e Visual Studio (o qualsiasi IDE preferisci) + +> **Pro tip:** Se lavori su un server CI, assicurati che il file di licenza Aspose sia incorporato come risorsa o referenziato tramite variabile d'ambiente per evitare filigrane di valutazione. + +--- + +## ## Come rendere PDF in PNG con Analisi dei Font + +### Perché analizzare i font? + +Quando un PDF contiene font personalizzati o incorporati, un rendering ingenuo può eliminare glifi che il renderer non riesce a mappare. Abilitare `AnalyzeFonts` costringe Aspose a ispezionare i flussi dei font e a sostituire i glifi mancanti, garantendo un'immagine fedele. + +### Implementazione passo‑passo + +1. **Crea un `PngDevice` con `AnalyzeFonts` attivato.** +2. **Carica il PDF di origine** usando `Document`. +3. **Elabora la pagina desiderata** e scrivi il PNG su disco. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**Cosa dovresti vedere:** Un file chiamato `rendered.png` in `YOUR_DIRECTORY` che appare identico alla prima pagina di `complexFonts.pdf`, includendo tutti i caratteri speciali e i segni diacritici. + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### Problemi comuni & come evitarli + +- **Font mancanti sul server:** Se il PDF fa riferimento a font non incorporati, posiziona quei font nel percorso di probing dell'applicazione o abilita `FontRepository` per puntare a una cartella personalizzata. +- **PDF di grandi dimensioni:** Renderizzare molte pagine in un ciclo può consumare memoria; elimina prontamente ogni istanza di `Document` o utilizza blocchi `using` come mostrato. + +--- + +## ## Aggiungere un TextStamp Auto‑Fit (Render PDF con Testo Dinamico) + +### Quando ti serve un timbro di dimensione dinamica? + +Immagina di generare fatture e di dover sovrapporre una filigrana “PAID” che si adatti a qualsiasi rettangolo tu scelga, indipendentemente dalla lunghezza del testo. Calcolare manualmente la dimensione del font è soggetto a errori; `AutoAdjustFontSizeToFitStampRectangle` di Aspose fa il lavoro pesante. + +### Implementazione passo‑passo + +1. **Configura un `TextStamp`** con le proprietà di auto‑regolazione. +2. **Carica il PDF di destinazione** che vuoi timbrare. +3. **Aggiungi il timbro a una pagina** e salva il risultato. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Risultato:** `stampAutoFit.pdf` contiene il testo “Important notice” perfettamente dimensionato nel rettangolo 300 × 150 pt, indipendentemente dalla lunghezza originale della stringa. + +#### Casi limite da considerare + +- **Stringhe molto lunghe:** Se il testo supera il rettangolo anche con la dimensione minima del font, Aspose lo troncherà secondo il `WordWrapMode`. Puoi pre‑verificare la lunghezza o aumentare la dimensione del rettangolo. +- **Timbrature multiple:** Riutilizzare la stessa istanza di `TextStamp` su pagine diverse funziona, ma ricorda che le proprietà di posizione (`Left`, `Top`) mantengono gli ultimi valori—reimpostale secondo necessità. + +--- + +## ## Salvare PDF come HTML usando la Tabella CMap del Font + +### Perché preoccuparsi della tabella CMap? + +Quando converti un PDF in HTML, preservare la mappatura Unicode è fondamentale per avere testo ricercabile. La strategia basata su CMap costringe Aspose a dare priorità alla mappa dei caratteri interna del font, il che spesso produce un'estrazione del testo più accurata rispetto a una codifica generica. + +### Implementazione passo‑passo + +1. **Crea `HtmlSaveOptions`** con la regola di codifica basata su CMap. +2. **Carica il PDF di origine**. +3. **Salva come HTML** usando le opzioni configurate. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**Cosa otterrai:** Una cartella (se `SplitIntoPages` è true) contenente `cmapHtml.html` e le risorse associate. Apri l'HTML in un browser e noterai testo selezionabile e ricercabile che corrisponde quasi perfettamente al PDF originale. + +#### Consigli per un'esportazione HTML pulita + +- **Immagini vs. vettori:** Imposta `RasterImagesSavingMode` su `RasterImagesSavingMode.AsEmbeddedPartsOfPng` se preferisci PNG rispetto a JPEG per grafica più nitida. +- **PDF di grandi dimensioni:** Usa `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` per mantenere leggera ogni pagina. + +--- + +## ## Esempio Completo – Tutti e Tre gli Scenari in Un Solo Progetto + +Di seguito trovi un'app console autonoma che dimostra le tre tecniche fianco a fianco. Copia‑incolla nel nuovo progetto console C#, aggiungi il pacchetto NuGet Aspose.PDF e regola i percorsi dei file. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Esegui il programma, e troverai: + +- `rendered.png` – un'immagine perfetta della prima pagina del PDF. +- `stampAutoFit.pdf` – il PDF originale con un timbro “Important notice” di dimensione dinamica. +- `cmapHtml.html` (più i file HTML specifici per pagina) – una versione HTML che preserva la codifica del testo originale. + +--- + +## ## Domande Frequenti (FAQ) + +**D: `AnalyzeFonts` aumenta il tempo di rendering?** +R: Slightly, because Aspose scans each font stream. The trade‑off is usually worth it for complex PDFs where missing glyphs are unacceptable. + +**D: Posso renderizzare più pagine in un ciclo?** +R: Absolutely. Just iterate over `sourcePdf.Pages` and call `pngDevice.Process(page, $"page{page.Number}.png")`. Remember to dispose of each `Document` if you open them separately. + +**D: What if + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 f25e5ee23..5c03c2a0b 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 画像に変換する方法を学びます。カスタム色深度と高度な画像処理テクニックを習得します。 +### [PDF を HTML に変換し、PDF 署名を検証する – 完全 Aspose .NET ガイド](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) + ## 追加リソース - [Aspose.PDF for Net ドキュメント](https://docs.aspose.com/pdf/net/) diff --git a/pdf/japanese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/japanese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..ec16fe784 --- /dev/null +++ b/pdf/japanese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,255 @@ +--- +category: general +date: 2026-04-02 +description: ベクトルを保持したままPDFをHTMLに変換し、次にAspose PDFを使用してPDF署名を検証します。Aspose PDFの変換方法を学び、C#でPDFのデジタル署名をチェックします。 +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: ja +og_description: ベクターを保持しながらPDFをHTMLに変換し、Aspose PDFでPDF署名を検証します。ステップバイステップのC#コード、ヒント、エッジケースの処理。 +og_title: PDFをHTMLに変換し、PDF署名を検証する – 完全なAspose .NETチュートリアル +tags: +- Aspose.PDF +- C# +- PDF processing +title: PDFをHTMLに変換し、PDF署名を検証する – 完全なAspose .NETガイド +url: /ja/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF を HTML に変換し、PDF 署名を検証する – 完全な Aspose .NET チュートリアル + +PDF を **HTML に変換** したいけれど、ベクター品質が失われたりデジタル署名が壊れたりすることを心配したことはありませんか? あなただけではありません。PDF にベクターグラフィックだけが含まれている場合や SHA‑3 ベースのデジタル署名が付いている場合、多くの開発者が壁にぶつかります。標準的なコンバータはすべてをラスタライズしてしまうか、署名を完全に無視してしまいます。 + +このガイドでは **Aspose.Pdf** for .NET を使った実践的な解決策を紹介します。まずベクターのみの PDF からラスタ画像を除去しながらクリーンな HTML に変換し、次に **PDF 署名を検証**(SHA‑3‑256 署名です)する方法を示し、結果をコンソールに出力します。最後まで読めば、両方のタスクを実行できる C# プログラムが手に入り、一般的な落とし穴を回避するためのヒントも得られます。 + +## 必要なもの + +- **Aspose.Pdf for .NET**(2026‑04 時点の最新バージョン、例: 23.12)。 +- .NET 開発環境(Visual Studio 2022 または C# 拡張機能付き VS Code)。 +- サンプル PDF 2 件: + 1. `vectorOnly.pdf` – ベクターとテキストのみで、ラスタ画像は含まれません。 + 2. `signed_sha3.pdf` – SHA‑3‑256 ハッシュでデジタル署名されています。 + +`Aspose.Pdf` 以外の NuGet パッケージは不要です。 + +--- + +## 手順 1: プロジェクトの作成と PDF の読み込み + +新しいコンソール アプリを作成し、Aspose.Pdf NuGet を追加して名前空間をインポートします。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*ポイント*: 最初にドキュメントを読み込んでおくことで、変換と署名検証の両方で同じオブジェクトを再利用でき、メモリ使用量を抑えられます。 + +--- + +## 手順 2: ラスタ画像をスキップして PDF を HTML に変換 + +Aspose.Pdf の `HtmlSaveOptions` は画像処理を細かく制御できます。`RasterImagesSavingMode` を `Skip` に設定すると、ライブラリはラスタ画像を完全に無視します—ベクターのみのソースに最適です。 + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**期待される出力**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*プロのコツ*: 後で生成された HTML をウェブページに埋め込む場合、出力ファイルには SVG と CSS だけが含まれ、重い PNG/JPEG データはありません。 + +--- + +## 手順 3: 署名ハンドラの準備 + +Aspose.Pdf の `PdfFileSignature` クラスはデジタル署名処理のエントリーポイントです。署名ディクショナリを読み取り、署名者名を取得し、特定のハッシュアルゴリズムで検証できます。 + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*重要性*: ハンドラがなければ署名の列挙や必要なハッシュアルゴリズム(例: SHA‑3‑256)の指定ができません。 + +--- + +## 手順 4: SHA‑3‑256 を使って各署名を列挙・検証 + +`GetSignNames()` メソッドは PDF 内のすべての署名ラベルを返します。ループで取得し、`VerifySignature` に `DigestHashAlgorithm.Sha3_256` を渡して結果をコンソールに出力します。 + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**サンプル コンソール出力**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*エッジケース*: 署名が別のハッシュ(例: SHA‑256)を使用している場合、検証は `False` を返します。ループ内で他の `DigestHashAlgorithm` を試すフォールバックチェックを追加できます。 + +--- + +## 手順 5: 完全動作サンプル(すべてのコードを一括掲載) + +以下は `Program.cs` にそのまま貼り付けられる完全プログラムです。`YOUR_DIRECTORY` を PDF が格納されている実際のフォルダーに置き換えてください。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +プログラムを実行します(`dotnet run` または Visual Studio で **F5**)。変換完了の確認メッセージと署名検証結果が順に表示されます。 + +--- + +## よくある質問と対処法 + +| 質問 | 回答 | +|----------|--------| +| **HTML に元のフォントは残りますか?** | Aspose.Pdf は使用されたフォントをデフォルトで base‑64 データ URI として埋め込むため、ホストマシンにフォントがなくても正しく表示されます。 | +| **PDF にベクターと画像の両方が含まれている場合は?** | 画像を除去したい場合は `RasterImagesSavingMode = Skip` のままにし、画像が必要な場合は `EmbedAll` に切り替えてください。オプションは変換ごとに設定できるので、2 回パスを走らせて両方のバージョンを作成できます。 | +| **署名が SHA‑512 の場合、どう検証しますか?** | `DigestHashAlgorithm.Sha3_256` を `DigestHashAlgorithm.Sha512` に置き換えます。署名ディクショナリからアルゴリズムを取得し、動的に選択することも可能です。 | +| **署名者の証明書情報は取得できますか?** | できます。検証後に `signatureHandler.GetSignatureInfo(signName).Certificate` を呼び出すと X.509 証明書が取得でき、`Subject` や `Issuer` などのフィールドを調べられます。 | +| **PDF がパスワード保護されている場合は?** | `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })` のようにパスワードを指定してロードします。その後のフローは同じです。 | + +--- + +## 本番向けコードのプロ・ティップス + +1. **PDF を確実に破棄** – `PdfDocument` インスタンスは `using` ブロックで囲むか、`Dispose()` を呼び出してネイティブリソースを解放します。 +2. **バッチ処理** – 数十件の PDF を扱う場合はディレクトリを走査し、結果を CSV に保存、`Parallel.ForEach` で変換を並列化すると効率的です。 +3. **ロギング** – `Console.WriteLine` を構造化ロガー(Serilog、NLog など)に置き換えて、特に多数の署名を検証する際のトレース性を向上させます。 +4. **例外処理** – `Aspose.Pdf.Exceptions` をキャッチして、破損ファイルを優雅に処理します: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **バージョン互換性** – Aspose.Pdf は頻繁に更新されます。`csproj` に記載した正確なバージョンでテストし、ここで示した API が 23.x 以降で動作することを確認してください。 + +--- + +## まとめ + +今回は **ベクターとテキストだけを残した HTML への変換** と、**SHA‑3‑256 アルゴリズムを用いた PDF 署名の検証** を、数行の C# コードで実現しました。主なポイントは次の通りです。 + +- ベクター専用のクリーン HTML を得るには `HtmlSaveOptions.RasterImagesSavingMode = Skip` を使用する。 +- `PdfFileSignature` と `DigestHashAlgorithm.Sha3_256` を組み合わせて、PDF デジタル署名を確実にチェックできる。 + +ここからは、**aspose pdf conversion** を使った PDF から PNG への変換や、埋め込みファイルの抽出、PDF を受け取って検証済み HTML スニペットを返す Web サービスの構築など、関連トピックに挑戦してみてください。 + +ぜひ試してオプションを調整し、得られた知見を共有してください。Happy coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/japanese/net/digital-signatures/_index.md b/pdf/japanese/net/digital-signatures/_index.md index cdbd9f70d..8c67a8797 100644 --- a/pdf/japanese/net/digital-signatures/_index.md +++ b/pdf/japanese/net/digital-signatures/_index.md @@ -26,6 +26,9 @@ Aspose.PDF for .NET を使用して、PDF にカスタムの外観でデジタ ### [Aspose.PDF を使用して PDF からデジタル署名情報を抽出する](./extract-digital-signature-info-from-pdfs-aspose-pdf/) Aspose.PDF Net のコードチュートリアル +### [PDF から署名を抽出する方法 – Aspose C# ガイド](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Aspose.PDF を使用して PDF からデジタル署名を抽出する手順を解説します。 + ### [Aspose.PDF for .NET で PDF 署名言語を変更する方法](./change-pdf-signature-language-aspose-net/) Aspose.PDF for .NET を使用して、PDF のデジタル署名テキストをカスタマイズする方法を学びましょう。多言語ドキュメントの作成とローカリゼーションに最適です。 @@ -53,6 +56,9 @@ Aspose.PDF for .NET を使用して PDF ファイルのデジタル署名を検 ### [C# で PDF 署名を検証する – デジタル署名 PDF の検証完全ガイド](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) C# を使用して PDF のデジタル署名を検証する手順を詳細に解説します。安全な検証プロセスを実装しましょう。 +### [PDF 署名を検証しベーツ番号を追加する – 完全 C# ガイド](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +C# で 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-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/japanese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..174263105 --- /dev/null +++ b/pdf/japanese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-04-02 +description: C# で Aspose.Pdf を使用して、署名の抽出、フィールドの追加、空白ページ PDF の追加、ウィジェットの追加、そして透明性を保持した + PDF の作成方法を学びます。 +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: ja +og_description: Aspose.Pdf を使用して PDF から署名を抽出し、フィールドや空白ページ、ウィジェットの追加、透明性の保持などの関連タスクを実行する方法。 +og_title: PDFから署名を抽出する方法 – Aspose C# ガイド +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: PDFから署名を抽出する方法 – Aspose C# ガイド +url: /ja/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF から署名を抽出する方法 – Aspose C# ガイド + +**PDF から署名を抽出する方法** は、契約書の自動処理や請求書承認、デジタル署名に依存するワークフローを自動化する際の一般的な要件です。 +このガイドでは、Aspose.Pdf for .NET を使用して **フィールドの追加方法**、**空白ページ PDF の追加方法**、**ウィジェットの追加方法**、そして **透明性を保持した PDF の作成方法** も併せて解説します。 + +毎晩何十件もの署名済み PDF が届くと想像してください。手作業でファイルを開いて署名を確認するのは悪夢です。数行の C# コードで署名者名をプログラム的に取得し、元のグラフィックをそのまま保ちつつ、既存の透明性やカラープロファイルを壊すことなく新しいフォームフィールドを追加できます。 + +> **得られるもの:** 透明性を保持した PDF/X‑4 への変換、埋め込まれたすべての署名名の抽出、空白ページの追加、同一ページ上の 2 箇所に表示されるテキストボックスフォームフィールドの作成を行う、完全に実行可能なサンプルです。 + +## 前提条件 + +- .NET 6.0 以降(コードは .NET Framework でも動作します) +- Aspose.Pdf for .NET **v25.2** 以上(`GetSignatureNames()` が必要です) +- Visual Studio プロジェクトまたは任意の C# IDE +- 以下のサンプル PDF を格納したフォルダー(自分で管理できる場所) + - `source.pdf` – 透明性を保ったまま変換したい任意の PDF + - `signed.pdf` – すでにデジタル署名が含まれている PDF + - (オプション)出力ファイル用の空フォルダー + +> **プロのコツ:** まだライセンス版をお持ちでない場合は、Aspose のウェブサイトから無料の一時ライセンスを取得できます。無料モードはテストに使用できますが、透かしが追加されます。 + +## 手順 1 – PDF/X‑4 に変換して透明性を保持する + +PDF をフラット化すると、透明性や埋め込みカラープロファイルが失われがちです。**PDF/X‑4** に変換すれば、これらのビジュアル要素をそのまま保持でき、印刷用ドキュメントに必須です。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**重要なポイント:** +PDF/X‑4 は、ライブ透明性を保持したままグラフィック交換を行うための ISO 標準です。`PdfFormatConversionOptions` を使用することで、透明オブジェクトがラスタライズされてファイルサイズが増大したり画質が低下したりする一般的な落とし穴を回避できます。 + +## 手順 2 – PDF から署名を抽出する方法 + +Aspose はバージョン 25.2 で `GetSignatureNames()` を導入し、署名抽出をワンライナーで実現しました。このメソッドは、各デジタル署名フィールドに割り当てられた論理名の配列を返します。 + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**期待される出力:** `signed.pdf` に *ManagerSig* と *ClientSig* という 2 つの署名が含まれている場合、コンソールには次のように表示されます。 + +``` +Found signatures: ManagerSig, ClientSig +``` + +**エッジケースの取り扱い:** +- PDF に署名がまったくない場合、`GetSignatureNames()` は空配列を返し、例外はスローされません。 +- 署名フィールドが破損している PDF では、呼び出しを `try/catch` でラップし、エラーをログに記録して処理全体を中断しないようにできます。 + +## 手順 3 – 空白ページ PDF を追加し、複数ウィジェットを持つテキストボックスを作成する + +新しいページの追加はシンプルですが、**フィールドの追加方法** と **ウィジェットの追加方法** を組み合わせるには少しコツが必要です。*ウィジェット* はフォームフィールドの視覚的表現であり、同一論理フィールドに複数のウィジェットを紐付けることで、同じデータを複数箇所に表示できます。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**複数ウィジェットを使う理由:** +たとえば、契約書の表裏両面に同じコメントを表示したい場合、同一フィールドに 2 つのウィジェットを付与すれば、どちらか一方で変更した内容が自動的にもう一方にも反映されます。 + +**よくある落とし穴:** +- `newDoc.Form` にフィールドを追加し忘れると、ウィジェットは PDF ビューアで見えなくなります。 +- 2 つのウィジェットに同一の矩形座標を指定すると重なって表示されます。`Rectangle` の値は必ず異なるように設定してください。 + +## 手順 4 – すべてを統合した実行可能サンプル + +以下は、上記の手順を順番通りに実行する単一プログラムです。新しいコンソールプロジェクトにコピー&ペーストし、パスを調整して実行してください。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### 期待される出力 + +プログラムを実行すると、次のような出力が得られます。 + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +`TextBoxMultipleWidgets.pdf` を Adobe Acrobat Reader で開くと、**Comments** とラベル付けされた同一のテキストボックスが 2 つ(上部とやや下部)表示されます。どちらかに入力すると、もう一方が即座に更新されます。 + +## よくある質問 (FAQ) + +| 質問 | 回答 | +|----------|--------| +| **実際の署名バイト列を取得できますか?** | `GetSignatureNames()` は論理名のみを返します。証明書や署名値を取得するには `SignatureField` オブジェクト(`document.Form["fieldName"] as SignatureField`)を使用してください。 | +| **PDF/X‑4 変換は暗号化された PDF でも機能しますか?** | はい、`Document.Open(file, password)` でパスワードを指定すれば変換できます。 | +| **ウィジェットを 2 つ以上追加したい場合は?** | 追加したい分だけ `textBox.Widgets.Add()` を呼び出せば OK です。 | +| **空白ページは元の PDF と同じサイズになりますか?** | 新しいページはデフォルトサイズ(A4)になります。必要に応じてカスタムサイズの `Page` オブジェクトを渡してください。 | +| **コードは .NET Core と互換性がありますか?** | 完全に対応しています。Aspose.Pdf はクロスプラットフォームです。NuGet パッケージを .NET Core プロジェクトに参照すれば利用できます。 | + +## 結論 + +本チュートリアルでは、**PDF から署名を抽出する方法** を中心に、**フィールドの追加方法**、**空白ページ PDF の追加方法**、**ウィジェットの追加方法**、そして **透明性を保持した PDF の作成方法** を Aspose.Pdf for C# を使って実装しました。これで、任意の文書処理パイプラインに組み込める、堅牢なエンドツーエンドソリューションが手に入りました。 + +次のチャレンジに挑戦してみませんか? これらのテクニックに Aspose の OCR モジュールを組み合わせて、スキャン画像からテキストを読み取る処理を作成してみましょう。 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/japanese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..b9fdabd72 --- /dev/null +++ b/pdf/japanese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,221 @@ +--- +category: general +date: 2026-04-02 +description: PDF署名を迅速に検証し、Aspose.Pdfを使用したベーツ番号付けの方法を学びます。ステップバイステップのコードとヒントが含まれています。 +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: ja +og_description: Aspose.Pdf を使用して PDF 署名を素早く検証し、ベーツ番号の付け方を学びましょう。完全なサンプルに従い、一般的な落とし穴を回避してください。 +og_title: PDF署名の検証とベーツ番号付与 – 完全C#ガイド +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: PDF署名の検証とベーツ番号付与 – 完全C#ガイド +url: /ja/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF署名の検証とベーツ番号付与 – 完全なC#ガイド + +契約書を送る前に **verify PDF signature** が必要だったことはありませんか?どの API 呼び出しを使えばいいか分からずに悩んだことがある開発者は多いです。このチュートリアルでは、Aspose.Pdf を使って **verify PDF signature** を行う方法を詳しく解説し、さらに **how to add bates numbering** を示して、ファイルを監査対応に保つ方法をご紹介します。 + +また、プログラムで **how to verify signature** を行う方法、**how to add bates** を一括で実行する方法、そして **check pdf signature** の結果の解釈についても触れます。最後まで読めば、両方のタスクを実行できる実行可能な C# コンソール アプリが手に入ります—謎はなく、コードは明快です。 + +--- + +## 必要なもの + +- **.NET 6.0** 以上(例は .NET Framework 4.7+ でも動作します) +- **Aspose.Pdf for .NET** NuGet パッケージ(バージョン 23.11 以降) +- 検証したい署名付き PDF ファイル(`signed.pdf`) +- ベーツ番号を付与する対象の普通の PDF(`input.pdf`) + +それらが揃っていればすぐに始められます。追加の SDK や隠し設定ファイルは不要です。 + +--- + +## ステップ 1: プロジェクトの設定 + +まずコンソール プロジェクトを作成します: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +`Program.cs` を開き、デフォルトのコードを削除します。最初からすべて構築するので、後で最終バージョンをコピー&ペーストできます。 + +--- + +## ステップ 2: PDF 署名の検証 + +### 検証が重要な理由 + +デジタル署名は、基になる証明書が失効している、または署名後に文書が改ざんされた場合、**compromised** になる可能性があります。Aspose.Pdf は便利な `IsSignatureCompromised` メソッドを提供しており、ブール値を返します—シンプルながら多くの監査パイプラインに十分な機能です。 + +### コードスニペット + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**説明** + +- `Document` は PDF をメモリに読み込みます。 +- `PdfFileSignature` はドキュメントをラップし、署名関連のメソッドを提供します。 +- `IsSignatureCompromised("Signature1")` は *Signature1* という名前の署名の完全性をチェックします。 +- ブール結果は署名が依然として信頼できるかどうかを示します。 + +> **Pro tip:** 署名フィールド名が分からない場合は、まず `pdfSignature.GetSignatureNames()` を呼び出してください。すべての署名識別子のリストが返ります。 + +--- + +## ステップ 3: ベーツ番号付与オプションの準備 + +### ベーツ番号付与とは? + +ベーツ番号は、法的または鑑定文書の各ページに印刷される連番識別子です。ディスカバリや監査プロセスでページを参照する際に非常に便利です。Aspose.Pdf の `BatesNumberingOptions` を使用すると、プレフィックス、開始番号、桁数、配置、余白をすべて 1 つのオブジェクトでカスタマイズできます。 + +### コードの続き + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**説明** + +- `BatesNumberingOptions` はすべての書式設定を一元化します。 +- `AddBatesNumbering` は各ページを自動的に走査します—手動ループは不要です。 +- `Prefix` (`INV-`) と `StartNumber` (1000) により、`INV-01000`、`INV-01001` などのラベルが生成されます。 +- ページ上で番号の位置を上下に調整したい場合は `BottomMargin` を変更してください。 + +--- + +## ステップ 4: 完全なサンプルを実行 + +ファイルを保存し、次に実行します: + +```bash +dotnet run +``` + +2 行のコンソール出力が表示されるはずです: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +最初の行が `True` と表示された場合、署名は compromised です—つまり、署名後に文書が改ざんされたか、証明書が無効になっていることを意味します。その場合は、以降の処理を中止してください。 + +--- + +## ステップ 5: よくあるエッジケースと対処方法 + +| Situation | What to Watch For | Suggested Fix | +|-----------|-------------------|---------------| +| **複数の署名** | `IsSignatureCompromised` は一度に 1 つのフィールドしかチェックしません。 | `pdfSignature.GetSignatureNames()` をループしてそれぞれ検証します。 | +| **カスタム署名フィールド名** | 名前が異なる場合、`"Signature1"` を使用すると例外がスローされる可能性があります。 | まず名前リストを取得するか、Acrobat で確認できる正確な名前を渡してください。 | +| **大容量 PDF(100 ページ以上)** | ベーツ番号の付与はメモリを多く使用する可能性があります。 | ストリーミングを有効にする `SaveOptions`(例: `PdfSaveOptions { Compress = true }`)を使用して `Document.Save` を呼び出します。 | +| **プレフィックスに非ラテン文字** | 一部のフォントはデフォルトで Unicode をサポートしていません。 | `pdfWithBates.Font` を `Arial Unicode MS` のような Unicode 対応フォントに設定します。 | +| **左側に番号を配置したい** | 配置が `Right` にハードコードされています。 | `BatesNumberingOptions` の `Alignment = HorizontalAlignment.Left` に変更します。 | + +--- + +## ステップ 6: 結果を手動で検証(オプション) + +任意の PDF ビューアで `BatesNumbered.pdf` を開きます: + +1. ページをめくって確認してください—各ページの右下隅に **INV‑01000** のようなラベルが表示されているはずです。 +2. Acrobat の **Signature Panel** を使用して署名をダブルクリックし、ステータスがコンソール出力と一致することを確認します。 + +すべてが一致すれば、**check pdf signature** のステータスを正常に確認し、**add bates numbering** を一度に適用できたことになります。 + +--- + +## よくある質問 + +**Q: ドキュメント全体を読み込まずに署名を検証できますか?** +A: Aspose.Pdf は内部でストリーミングしますが、`Document` インスタンスは依然として必要です。巨大なファイルの場合は、メモリ使用量を減らすためにファイルストリームと共に `PdfFileSignature` を直接使用することを検討してください。 + +**Q: Aspose.Pdf のライセンスは必要ですか?** +A: 無料評価版でも動作しますが、透かしが付加されます。本番環境では正規ライセンスが必要です。ライセンスがない場合、出力 PDF に Aspose のバナーが表示されます。 + +**Q: ページの一部だけにベーツ番号を付与したい場合はどうすればよいですか?** +A: `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` のように、配列で番号付与したいページ番号を指定して使用します。 + +--- + +## 結論 + +Aspose.Pdf を使って **how to verify PDF signature** の方法が分かり、ブール結果の意味も理解でき、任意の PDF に自信を持って **add bates numbering** を適用できるようになりました。完全な実行可能サンプルは両方のタスクを組み合わせており、ドキュメントの真正性をチェックし、監査対応の識別子をスタンプする単一のコンソール ツールを提供します。 + +次のステップとして、信頼できるルートストアに対する **how to verify signature** の検証や、対角線スタンプやセクションごとのプレフィックスなど、カスタム **add bates numbering** スタイルを試すことが考えられます。これらのトピックは、今回習得した基礎の上に構築され、ドキュメント処理パイプラインをさらに強固にします。 + +コーディングを楽しんでください。そして、正しいコードさえあれば署名のチェックやページ番号付与は簡単です! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/japanese/net/printing-rendering/_index.md index dbc7528d5..7a427984c 100644 --- a/pdf/japanese/net/printing-rendering/_index.md +++ b/pdf/japanese/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Aspose.PDF for .NET を使用して、PDF の特定のページを効率的に ### [Aspose.PDF for .NET を使用して PDF のカスタムズーム係数を設定する - 完全ガイド](./aspose-pdf-net-set-zoom-factor-pdfs/) Aspose.PDF for .NET を使用して PDF ドキュメントにカスタムズーム係数を設定する方法を学びます。このガイドでは、インストール、実装手順、そして実用的なアプリケーションについて説明します。 +### [C# で PDF をレンダリングする方法 – PNG、HTML、スタンピングの完全ガイド](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Aspose.PDF for .NET を使用して C# で PDF を PNG や HTML に変換し、スタンプを追加する手順を解説します。 + ## 追加リソース - [Aspose.PDF for Net ドキュメント](https://docs.aspose.com/pdf/net/) diff --git a/pdf/japanese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/japanese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..05fab0b71 --- /dev/null +++ b/pdf/japanese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-04-02 +description: C#でAspose.PDFを使用してPDFをレンダリングする方法。PDFをPNGに変換し、HTMLとして保存し、テキストスタンプを自動フィットさせて効率的に追加する方法を学びましょう。 +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: ja +og_description: C#でAspose.PDFを使用してPDFをレンダリングする方法。このガイドでは、PDFをPNGに変換し、HTMLとして保存し、オートフィットテキストスタンプを作成する手順を示します。 +og_title: C#でPDFをレンダリングする方法 – PNG、HTML、そして自動フィットスタンプ +tags: +- Aspose.PDF +- C# +- PDF processing +title: C#でPDFをレンダリングする方法 – PNG、HTML、スタンプ付けの完全ガイド +url: /ja/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# で PDF をレンダリングする方法 – PNG、HTML、スタンプの完全ガイド + +.NET アプリケーションで **PDF をレンダリング** するときに、文字が欠けてしまったことはありませんか?`PdfRenderer` を手早く試したら文字が抜けていたり、サムネイル用にきれいな PNG が必要なのに出力がギザギザだったりした経験があるかもしれません。実際のところ、適切なレンダリングオプションとフォント処理の組み合わせが、壊れたプレビューとピクセルパーフェクトな画像の差を生み出します。 + +このチュートリアルでは、Aspose.PDF for .NET を使った 3 つの実践シナリオを順に解説します。PDF ページを PNG にレンダリングしながらフォントを解析する方法、フォントサイズを自動調整する `TextStamp` の追加方法、フォントの CMap テーブルを利用して PDF を HTML に保存する方法です。最後まで読めば、**PDF を PNG にレンダリング**、**PDF ページを PNG に変換**、**PDF ページ画像をエクスポート**、さらには **PDF を HTML に保存** できるようになります。 + +## 前提条件 + +- .NET 6.0 以降(コードは .NET Framework 4.6+ でも動作します) +- Aspose.PDF for .NET NuGet パッケージ(`Install-Package Aspose.PDF`) +- 複雑なフォントを含む PDF ファイル(例: `complexFonts.pdf`)※レンダリングデモ用 +- C# と Visual Studio(またはお好みの IDE)に関する基本的な知識 + +> **プロのコツ:** CI サーバー上で実行する場合、評価版の透かしが入らないように Aspose のライセンスファイルをリソースとして埋め込むか、環境変数で参照できるようにしておきましょう。 + +--- + +## ## フォント解析付きで PDF を PNG にレンダリングする方法 + +### なぜフォントを解析するのか? + +PDF にカスタムフォントや埋め込みフォントが含まれていると、単純なレンダリングではマッピングできないグリフが欠落します。`AnalyzeFonts` を有効にすると、Aspose がフォントストリームを検査し、欠損グリフを置換してくれるため、忠実な画像が得られます。 + +### 手順ごとの実装 + +1. **`AnalyzeFonts` をオンにした `PngDevice` を作成する。** +2. **`Document` を使ってソース PDF を読み込む。** +3. **対象ページを処理し、PNG をディスクに書き出す。** + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**期待される結果:** `YOUR_DIRECTORY` に `rendered.png` という名前のファイルが生成され、`complexFonts.pdf` の最初のページと全く同じ外観(特殊文字やダイアクリティカルマークを含む)になります。 + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### よくある落とし穴と回避策 + +- **サーバー上にフォントがない場合:** PDF が埋め込まれていないフォントを参照している場合は、アプリケーションの検索パスにフォントを配置するか、`FontRepository` を使ってカスタムフォルダーを指定してください。 +- **大容量 PDF:** ループで多数のページをレンダリングするとメモリを大量に消費します。各 `Document` インスタンスは速やかに破棄するか、下記のように `using` ブロックで囲んでください。 + +--- + +## ## 動的テキストスタンプを自動フィットさせる (PDF に動的テキストをレンダリング) + +### どんなときに動的サイズのスタンプが必要になるか? + +請求書を生成し、任意の矩形に「PAID」透かしを重ねたいとします。テキスト長に応じてフォントサイズを手動で計算するのはミスが起きやすいです。Aspose の `AutoAdjustFontSizeToFitStampRectangle` を使えば、この処理を自動化できます。 + +### 手順ごとの実装 + +1. **自動調整プロパティを設定した `TextStamp` を構成する。** +2. **スタンプを付与したい対象 PDF を読み込む。** +3. **ページにスタンプを追加し、結果を保存する。** + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**結果:** `stampAutoFit.pdf` には、元の文字列長に関係なく 300 × 150 pt の矩形にぴったり収まる「Important notice」というテキストが配置されます。 + +#### 考慮すべきエッジケース + +- **非常に長い文字列:** 矩形内に収まらない場合、Aspose は `WordWrapMode` に従って切り詰めます。事前に長さをチェックするか、矩形サイズを大きくしてください。 +- **複数スタンプ:** 同じ `TextStamp` インスタンスを別ページで再利用できますが、`Left` や `Top` といった位置プロパティは前回の値を保持します。必要に応じてリセットしてください。 + +--- + +## ## フォントの CMap テーブルを利用して PDF を HTML に保存 + +### CMap テーブルを使う理由は? + +PDF を HTML に変換する際、Unicode マッピングを保持することは検索可能なテキストにとって重要です。CMap ベースの戦略を取ることで、Aspose はフォント内部の文字マップを優先し、汎用エンコーディングよりも正確なテキスト抽出が期待できます。 + +### 手順ごとの実装 + +1. **CMap ベースのエンコーディング規則を設定した `HtmlSaveOptions` を作成する。** +2. **ソース PDF を読み込む。** +3. **設定したオプションで HTML として保存する。** + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**得られるもの:** `SplitIntoPages` が true の場合はフォルダーが作成され、`cmapHtml.html` と関連リソースが格納されます。ブラウザーで HTML を開くと、元の PDF とほぼ同等の選択・検索可能なテキストが確認できます。 + +#### 綺麗な HTML エクスポートのコツ + +- **画像 vs. ベクター:** 鮮明なグラフィックが必要なら `RasterImagesSavingMode` を `RasterImagesSavingMode.AsEmbeddedPartsOfPng` に設定し、JPEG ではなく PNG を埋め込みます。 +- **大容量 PDF:** `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` を使用して、各ページを軽量に保ちます。 + +--- + +## ## 完全動作サンプル – 3 つのシナリオを 1 プロジェクトで実装 + +以下は 3 つのテクニックを同時にデモできる、自己完結型コンソールアプリです。新しい C# コンソールプロジェクトにコピー&ペーストし、Aspose.PDF NuGet パッケージを追加、ファイルパスを環境に合わせて調整してください。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +プログラムを実行すると、次のファイルが生成されます。 + +- `rendered.png` – PDF の最初のページを完璧に画像化したもの。 +- `stampAutoFit.pdf` – 動的にサイズ調整された「Important notice」スタンプが付与された元の PDF。 +- `cmapHtml.html`(ページごとの HTML ファイルも含む) – 元のテキストエンコーディングを保持した HTML バージョン。 + +--- + +## ## よくある質問 (FAQ) + +**Q: `AnalyzeFonts` を有効にするとレンダリング時間は増えますか?** +A: 若干増加します。Aspose が各フォントストリームを走査するためです。ただし、欠損グリフが許容できない複雑な PDF では、このトレードオフは十分に価値があります。 + +**Q: ループで複数ページをレンダリングできますか?** +A: もちろん可能です。`sourcePdf.Pages` を走査し、`pngDevice.Process(page, $"page{page.Number}.png")` のように呼び出してください。別々に `Document` を開く場合は、各インスタンスを必ず破棄してください。 + +**Q: もし + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 a2361bd42..70994524e 100644 --- a/pdf/korean/net/conversion-export/_index.md +++ b/pdf/korean/net/conversion-export/_index.md @@ -165,13 +165,13 @@ 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로 손쉽게 변환하는 방법을 알아보세요. 이 가이드에서는 설정, 변환 단계 및 모범 사례를 다룹니다. +Aspose.PDF for .NET을 사용하여 MHT 파일을 PDF로 손쉽게 변환하는 방법을 알아보세요. 이 가이드는 설정, 변환 단계 및 모범 사례를 다룹니다. ### [Aspose.PDF for .NET을 사용하여 여러 TIFF 이미지를 단일 PDF로 변환하는 방법: 포괄적인 가이드](./convert-tiff-to-pdf-aspose-dotnet-guide/) -Aspose.PDF for .NET을 사용하여 여러 TIFF 이미지를 하나의 PDF 문서로 효율적으로 변환하는 방법을 알아보세요. 이 가이드에서는 설정, 구현 및 성능 최적화에 대해 다룹니다. +Aspose.PDF for .NET을 사용하여 여러 TIFF 이미지를 하나의 PDF 문서로 효율적으로 변환하는 방법을 알아보세요. 이 가이드는 설정, 구현 및 성능 최적화에 대해 다룹니다. ### [Aspose.PDF for .NET을 사용하여 PCL을 PDF로 변환하는 방법: 완전한 가이드](./convert-pcl-to-pdf-aspose-net/) Aspose.PDF for .NET을 사용하여 PCL(Printer Command Language) 파일을 PDF로 원활하게 변환하는 방법을 알아보세요. 코드 예제와 실제 응용 프로그램을 활용한 단계별 가이드를 따라 해 보세요. @@ -224,6 +224,9 @@ Aspose.PDF for .NET을 사용하여 PDF-HTML 변환을 완벽하게 구현하세 ### [Aspose.PDF for .NET을 이용한 PDF-HTML 변환](./pdf-to-html-conversion-aspose-dot-net/) Aspose.PDF Net에 대한 코드 튜토리얼 +### [PDF를 HTML로 변환하고 PDF 서명을 검증하기 – 전체 Aspose .NET 가이드](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Aspose.PDF for .NET을 사용하여 PDF를 HTML로 변환하고 서명을 검증하는 방법을 단계별로 안내합니다. + ### [Aspose.PDF를 사용하여 .NET에서 PDF를 TIFF로 변환: 단계별 가이드](./pdf-to-tiff-conversion-aspose-pdf-net/) Aspose.PDF for .NET을 사용하여 PDF 문서를 TIFF 이미지로 변환하는 방법을 알아보세요. 사용자 정의 색상 심도와 고급 이미지 처리 기술을 익혀보세요. diff --git a/pdf/korean/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/korean/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..30f79a717 --- /dev/null +++ b/pdf/korean/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,257 @@ +--- +category: general +date: 2026-04-02 +description: 벡터를 유지하면서 PDF를 HTML로 변환한 다음, Aspose PDF를 사용하여 PDF 서명을 확인합니다. Aspose PDF + 변환을 배우고 C#에서 PDF 디지털 서명을 확인하세요. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: ko +og_description: 벡터를 보존하면서 PDF를 HTML로 변환하고 Aspose PDF로 PDF 서명을 검증합니다. 단계별 C# 코드, 팁 + 및 엣지 케이스 처리. +og_title: PDF를 HTML로 변환하고 PDF 서명 확인 – 완전한 Aspose .NET 튜토리얼 +tags: +- Aspose.PDF +- C# +- PDF processing +title: PDF를 HTML로 변환하고 PDF 서명 확인하기 – 전체 Aspose .NET 가이드 +url: /ko/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF를 HTML로 변환하고 PDF 서명 검증 – 완전한 Aspose .NET 튜토리얼 + +PDF를 **HTML로 변환**해야 할 때 벡터 품질이 손실되거나 디지털 서명이 깨질까 걱정한 적이 있나요? 당신만 그런 것이 아닙니다. PDF에 벡터 그래픽만 있거나 SHA‑3 기반 디지털 서명이 포함된 경우 많은 개발자들이 벽에 부딪히게 됩니다—표준 변환기는 모든 것을 래스터화하거나 서명을 완전히 무시합니다. + +이 가이드에서는 **Aspose.Pdf** for .NET을 사용한 실용적인 솔루션을 단계별로 살펴보겠습니다: 먼저 래스터 이미지를 제거하면서 벡터‑전용 PDF를 깔끔한 HTML로 변환하고, 이어서 **PDF 서명 검증**(예, SHA‑3‑256) 방법을 보여드리고 콘솔에 결과를 출력합니다. 최종적으로 두 작업을 모두 수행할 수 있는 실행 가능한 C# 프로그램과 흔히 발생하는 함정을 피하는 팁을 제공합니다. + +## 필요 사항 + +- **Aspose.Pdf for .NET** (2026‑04 현재 최신 버전, 예: 23.12). +- .NET 개발 환경 (Visual Studio 2022 또는 C# 확장 기능이 설치된 VS Code). +- 샘플 PDF 두 개: + 1. `vectorOnly.pdf` – 벡터와 텍스트만 포함하고 래스터 이미지는 없음. + 2. `signed_sha3.pdf` – SHA‑3‑256 해시로 디지털 서명됨. + +`Aspose.Pdf` 외에 추가 NuGet 패키지는 필요하지 않습니다. + +--- + +## 단계 1: 프로젝트 설정 및 PDF 로드 + +새 콘솔 앱을 만들고 Aspose.Pdf NuGet을 추가한 뒤 네임스페이스를 가져옵니다. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*왜 중요한가*: 문서를 미리 로드하면 변환과 서명 검증 모두에 객체를 재사용할 수 있어 메모리 사용량을 낮출 수 있습니다. + +--- + +## 단계 2: 래스터 이미지 건너뛰면서 PDF를 HTML로 변환 + +Aspose.Pdf의 `HtmlSaveOptions`는 이미지 처리 방식을 세밀하게 제어할 수 있습니다. `RasterImagesSavingMode`를 `Skip`으로 설정하면 라이브러리가 래스터 이미지를 완전히 무시하므로 벡터‑전용 소스에 최적입니다. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**예상 출력**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Pro tip*: 나중에 HTML을 웹 페이지에 삽입해야 할 경우, 생성된 파일에는 SVG와 CSS만 포함되고 PNG/JPEG와 같은 무거운 블롭은 없습니다. + +--- + +## 단계 3: 서명 핸들러 준비 + +Aspose.Pdf의 `PdfFileSignature` 클래스는 모든 디지털 서명 작업의 진입점입니다. 서명 사전을 읽고 이름을 추출한 뒤 특정 해시 알고리즘을 사용해 검증할 수 있게 해줍니다. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*왜 이 단계가 중요한가*: 핸들러가 없으면 서명을 열거하거나 필요한 해시 알고리즘(예: SHA‑3‑256)을 선택할 수 없습니다. + +--- + +## 단계 4: SHA‑3‑256을 사용해 각 서명 열거 및 검증 + +`GetSignNames()` 메서드는 PDF에 포함된 모든 서명 레이블을 반환합니다. 이를 순회하면서 `VerifySignature`에 `DigestHashAlgorithm.Sha3_256`을 전달하고 결과를 출력합니다. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**샘플 콘솔 출력**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Edge case*: 서명이 다른 해시(예: SHA‑256)를 사용하면 검증 결과가 `False`가 됩니다. 루프 안에서 다른 `DigestHashAlgorithm` 값을 시도해 폴백 검증을 추가할 수 있습니다. + +--- + +## 단계 5: 전체 작업 예제 (코드 한 곳에 모음) + +아래는 `Program.cs`에 복사‑붙여넣기 할 수 있는 완전한 프로그램입니다. `YOUR_DIRECTORY`를 PDF 파일이 위치한 실제 폴더 경로로 바꾸세요. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +프로그램을 실행합니다(`dotnet run` 또는 Visual Studio에서 **F5**). 변환 확인 메시지와 서명 검증 결과가 차례로 표시됩니다. + +--- + +## 흔히 묻는 질문 & 해결 방법 + +| Question | Answer | +|----------|--------| +| **Will the HTML still contain the original fonts?** | Aspose.Pdf는 기본적으로 사용된 폰트를 base‑64 데이터 URI 형태로 임베드하므로, 호스트 머신에 해당 폰트가 없더라도 출력이 올바르게 렌더링됩니다. | +| **What if my PDF has both vectors *and* images?** | 이미지를 제외하려면 `RasterImagesSavingMode = Skip`을 유지하고, 필요하면 `EmbedAll`로 전환하세요. 옵션은 변환마다 적용되므로 두 버전이 필요하면 두 번 실행하면 됩니다. | +| **My signature uses SHA‑512—how do I verify it?** | `DigestHashAlgorithm.Sha3_256`을 `DigestHashAlgorithm.Sha512`로 교체하면 됩니다. 서명 사전에서 알고리즘을 감지해 동적으로 선택할 수도 있습니다. | +| **Is there a way to get the signer’s certificate details?** | 네. 검증 후 `signatureHandler.GetSignatureInfo(signName).Certificate`를 호출하면 X.509 인증서를 얻을 수 있으며, `Subject`와 `Issuer` 같은 필드를 확인할 수 있습니다. | +| **What if the PDF is password‑protected?** | `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`와 같이 로드하면 됩니다. 나머지 워크플로는 동일하게 진행됩니다. | + +--- + +## 프로덕션 수준 코드 위한 Pro Tips + +1. **Dispose PDFs Properly** – `PdfDocument` 인스턴스를 `using` 블록으로 감싸거나 `Dispose()`를 호출해 네이티브 리소스를 해제합니다. +2. **Batch Processing** – 수십 개의 PDF를 처리해야 한다면 디렉터리를 순회하고 결과를 CSV에 저장한 뒤 `Parallel.ForEach`로 변환을 병렬화합니다. +3. **Logging** – `Console.WriteLine`을 구조화된 로거(Serilog, NLog)로 교체해 특히 다수의 서명을 검증할 때 추적성을 높입니다. +4. **Error Handling** – `Aspose.Pdf.Exceptions`를 잡아 손상된 파일을 우아하게 처리합니다: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Version Compatibility** – Aspose.Pdf는 빠르게 업데이트됩니다. `csproj`에 명시된 정확한 버전으로 항상 테스트하세요. 여기 소개한 API는 23.x 이상에서 동작합니다. + +--- + +## 결론 + +우리는 **PDF를 HTML로 변환**하면서 벡터와 텍스트만 보존하고, **SHA‑3‑256 알고리즘**을 사용해 **PDF 서명을 검증**하는 작업을 몇 줄의 C# 코드로 구현했습니다. 주요 포인트는 다음과 같습니다. + +- 깔끔한 벡터‑전용 HTML을 원한다면 `HtmlSaveOptions.RasterImagesSavingMode = Skip`을 사용하세요. +- `PdfFileSignature`와 `DigestHashAlgorithm.Sha3_256`을 활용해 **pdf 디지털 서명을 신뢰성 있게 확인**합니다. + +이제 PDF를 PNG로 변환하거나 임베디드 파일을 추출하는 등 **aspose pdf conversion** 관련 주제로 확장하거나, PDF를 받아 검증된 HTML 스니펫을 반환하는 웹 서비스를 구축해 볼 수 있습니다. + +한 번 직접 실행해 보고 옵션을 조정해 보세요. 여러분의 발견을 공유해 주시면 감사하겠습니다. Happy coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/korean/net/digital-signatures/_index.md b/pdf/korean/net/digital-signatures/_index.md index b7d4931cd..5ead569de 100644 --- a/pdf/korean/net/digital-signatures/_index.md +++ b/pdf/korean/net/digital-signatures/_index.md @@ -59,6 +59,12 @@ C#을 사용해 PDF 문서를 로드하고 PDF/X‑4 형식으로 변환한 뒤, ### [Aspose를 사용하여 PDF 서명 검증 – PDF를 HTML로 변환](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Aspose를 사용해 PDF 서명을 검증하고 PDF를 HTML로 변환하는 방법을 단계별로 안내합니다. +### [PDF 서명 검증 및 베이츠 번호 매기기 – 완전 C# 가이드](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +C#을 사용해 PDF 서명을 검증하고 베이츠 번호를 추가하는 단계별 방법을 안내합니다. + +### [PDF에서 서명을 추출하는 방법 – Aspose C# 가이드](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Aspose.PDF를 사용하여 C#에서 PDF 파일의 디지털 서명을 추출하는 단계별 방법을 안내합니다. + ## 추가 자료 - [Net 문서용 Aspose.PDF](https://docs.aspose.com/pdf/net/) diff --git a/pdf/korean/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/korean/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..ad518a32b --- /dev/null +++ b/pdf/korean/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,249 @@ +--- +category: general +date: 2026-04-02 +description: C#에서 Aspose.Pdf를 사용하여 서명을 추출하고, 필드를 추가하고, 빈 페이지 PDF를 삽입하며, 위젯을 추가하는 방법과 + 투명성을 유지하는 PDF를 만드는 방법을 배웁니다. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: ko +og_description: Aspose.Pdf를 사용하여 PDF에서 서명을 추출하고 필드 추가, 빈 페이지 삽입, 위젯 추가 및 투명도 보존과 같은 + 관련 작업을 수행하는 방법. +og_title: PDF에서 서명 추출 방법 – Aspose C# 가이드 +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: PDF에서 서명 추출 방법 – Aspose C# 가이드 +url: /ko/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF에서 서명 추출 방법 – Aspose C# 가이드 + +**PDF에서 서명을 추출하는 방법**은 계약 처리, 청구서 승인 또는 디지털 서명을 사용하는 모든 워크플로를 자동화할 때 흔히 요구되는 작업입니다. +이 가이드에서는 Aspose.Pdf for .NET 라이브러리를 사용하여 **필드 추가 방법**, **빈 페이지 PDF 추가**, **위젯 추가 방법**, 그리고 **투명도 유지 PDF**에 대해서도 살펴보겠습니다. + +매일 밤 수십 개의 서명된 PDF를 받는다고 상상해 보세요. 각 파일을 수동으로 열어 서명을 확인하는 일은 악몽과도 같습니다. 몇 줄의 C# 코드만으로 서명 이름을 프로그래밍 방식으로 추출하고, 원본 그래픽을 그대로 유지하며, 새로운 양식 필드까지 문서에 추가할 수 있습니다—기존 투명도나 색상 프로파일을 손상시키지 않고 말이죠. + +> **얻을 수 있는 것:** 투명도를 유지하면서 PDF를 PDF/X‑4로 변환하고, 모든 내장 서명 이름을 추출하며, 빈 페이지를 추가하고, 같은 페이지에 두 군데 나타나는 텍스트 박스 양식 필드를 생성하는 완전하고 실행 가능한 예제. + +## 사전 요구 사항 + +- .NET 6.0 이상 (코드는 .NET Framework에서도 작동합니다) +- Aspose.Pdf for .NET **v25.2** 이상 (`GetSignatureNames()`에 필요) +- Visual Studio 프로젝트 또는 기타 C# IDE +- 직접 관리하는 폴더에 있는 세 개의 샘플 PDF: + - `source.pdf` – 투명도를 유지하면서 변환하고 싶은 모든 PDF + - `signed.pdf` – 이미 디지털 서명이 포함된 PDF + - (선택) 출력 파일용 빈 폴더 + +> **프로 팁:** 아직 라이선스 사본이 없으면 Aspose 웹사이트에서 무료 임시 라이선스를 요청할 수 있습니다. 무료 모드는 테스트에 사용할 수 있지만 워터마크가 추가됩니다. + +## 1단계 – PDF를 PDF/X‑4로 변환하여 투명도 유지 + +PDF를 플랫하게 만들면 투명도와 내장 색상 프로파일이 종종 손실됩니다. **PDF/X‑4**로 변환하면 이러한 시각 요소가 그대로 유지되어 인쇄 준비 문서에 필수적입니다. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**왜 중요한가:** +PDF/X‑4는 실시간 투명도를 유지하는 그래픽 교환 PDF에 대한 ISO 표준입니다. `PdfFormatConversionOptions`를 사용하면 투명 객체를 래스터화하는 일반적인 함정을 피할 수 있어 파일 크기가 급격히 증가하거나 품질이 저하되는 일을 방지합니다. + +## 2단계 – PDF에서 서명 추출하기 + +Aspose는 버전 25.2에서 `GetSignatureNames()`를 도입하여 서명 추출을 한 줄 코드로 구현할 수 있게 했습니다. 이 메서드는 각 디지털 서명 필드에 할당된 논리적 이름 배열을 반환합니다. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**예상 결과:** `signed.pdf`에 *ManagerSig*와 *ClientSig*라는 두 서명이 포함되어 있으면 콘솔에 다음과 같이 출력됩니다. + +``` +Found signatures: ManagerSig, ClientSig +``` + +**예외 상황 처리:** +- PDF에 서명이 없으면 `GetSignatureNames()`는 빈 배열을 반환하며 예외가 발생하지 않습니다. +- 서명 필드가 손상된 PDF의 경우 `try/catch`로 호출을 감싸고 오류를 기록하면 전체 프로세스가 중단되지 않습니다. + +## 3단계 – 빈 페이지 PDF 추가 및 다중 위젯 텍스트 박스 만들기 + +새 페이지를 추가하는 것은 간단하지만 **필드 추가 방법**과 **위젯 추가 방법**을 함께 적용하려면 약간의 nuance가 필요합니다. *위젯*은 양식 필드의 시각적 표현이며, 동일한 논리 필드에 여러 위젯을 연결하면 동일한 데이터가 여러 위치에 나타날 수 있습니다. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**다중 위젯을 사용하는 이유:** +예를 들어 계약서 앞면과 뒷면에 동일한 코멘트를 표시해야 한다면, 같은 필드에 두 개의 위젯을 연결하면 사용자가 한 위치에서 변경한 내용이 자동으로 다른 위치에도 반영됩니다. + +**흔히 발생하는 실수:** +- `newDoc.Form`에 필드를 추가하지 않으면 위젯이 PDF 뷰어에서 보이지 않습니다. +- 두 위젯에 동일한 사각형 좌표를 사용하면 겹쳐서 표시되므로 `Rectangle` 값이 서로 다르게 설정해야 합니다. + +## 4단계 – 전체 예제: 실행 가능한 완전한 코드 + +아래 코드는 앞서 설명한 모든 단계를 순서대로 실행하는 단일 프로그램입니다. 새 콘솔 프로젝트에 복사·붙여넣기하고 경로를 조정한 뒤 실행하세요. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### 예상 출력 + +프로그램을 실행하면 다음과 같은 출력이 표시됩니다. + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +`TextBoxMultipleWidgets.pdf`를 Adobe Acrobat Reader에서 열면 **Comments**라는 레이블이 붙은 두 개의 동일한 텍스트 박스를 확인할 수 있습니다—하나는 상단에, 다른 하나는 약간 아래에 위치합니다. 하나에 입력하면 다른 하나가 즉시 업데이트됩니다. + +## 자주 묻는 질문 (FAQ) + +| Question | Answer | +|----------|--------| +| **실제 서명 바이트를 추출할 수 있나요?** | `GetSignatureNames()`는 논리적 이름만 반환합니다. 인증서나 서명 값을 가져오려면 `SignatureField` 객체(`document.Form["fieldName"] as SignatureField`)를 사용해야 합니다. | +| **PDF/X‑4 변환은 암호화된 PDF에서도 작동하나요?** | 네, `Document.Open(file, password)`를 통해 비밀번호를 제공하면 됩니다. | +| **두 개 이상 위젯이 필요하면 어떻게 하나요?** | 추가 `WidgetAnnotation`마다 `textBox.Widgets.Add()`를 호출하면 됩니다. | +| **빈 페이지가 원본 PDF의 페이지 크기를 그대로 물려받나요?** | 새 페이지는 기본 크기(A4)를 사용합니다. 필요하면 사용자 정의 크기의 `Page` 객체를 전달할 수 있습니다. | +| **코드가 .NET Core와 호환되나요?** | 물론입니다—Aspose.Pdf는 크로스 플랫폼입니다. .NET Core 프로젝트에 NuGet 패키지를 참조하면 됩니다. | + +## 결론 + +이 튜토리얼에서는 Aspose.Pdf for C#을 사용하여 **PDF에서 서명을 추출하는 방법**을 시연했으며, 동시에 **필드 추가 방법**, **빈 페이지 PDF 추가**, **위젯 추가 방법**, 그리고 **투명도 유지 PDF**에 대해서도 다루었습니다. 이제 어떤 문서 처리 파이프라인에도 손쉽게 적용할 수 있는 견고하고 엔드‑투‑엔드 솔루션을 갖추게 되었습니다. + +다음 도전 과제가 준비되셨나요? 이 기술들을 Aspose의 OCR 모듈과 결합해 스캔된 이미지에서 텍스트를 읽어보세요. + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/korean/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..a2a29f98f --- /dev/null +++ b/pdf/korean/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,223 @@ +--- +category: general +date: 2026-04-02 +description: Aspose.Pdf를 사용하여 PDF 서명을 빠르게 검증하고 베이츠 번호 매기기를 추가하는 방법을 배우세요. 단계별 코드와 + 팁이 포함되어 있습니다. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: ko +og_description: Aspose.Pdf를 사용하여 PDF 서명을 빠르게 검증하고 베이츠 번호 매기기를 추가하는 방법을 배우세요. 전체 예제를 + 따라 일반적인 함정을 피하십시오. +og_title: PDF 서명 검증 및 베이츠 번호 추가 – 완전 C# 가이드 +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: PDF 서명 검증 및 베이츠 번호 매기기 – 완전 C# 가이드 +url: /ko/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF 서명 검증 및 베이츠 번호 추가 – 완전한 C# 가이드 + +계약서를 전송하기 전에 **PDF 서명을 검증**해야 하는데 어떤 API 호출을 사용해야 할지 몰라 고민한 적 있나요? 당신만 그런 것이 아닙니다—많은 개발자들이 법적 구속력이 있는 PDF를 다룰 때 이 문제에 부딪힙니다. 이번 튜토리얼에서는 Aspose.Pdf를 사용해 **PDF 서명 검증**을 정확히 수행하는 방법을 단계별로 안내하고, **베이츠 번호를 추가**하는 방법도 보여드립니다. + +또한 **프로그램matically 서명 검증** 방법, **한 번에 베이츠 번호 추가** 방법, 그리고 **PDF 서명 검증** 결과를 해석하는 방법도 다룹니다. 최종적으로 두 작업을 모두 수행하는 실행 가능한 C# 콘솔 앱을 만들 수 있게 됩니다—미스테리 없이 명확한 코드만 제공합니다. + +--- + +## 필요 사항 + +- **.NET 6.0** 이상 (예제는 .NET Framework 4.7+에서도 동작) +- **Aspose.Pdf for .NET** NuGet 패키지 (버전 23.11 이상) +- 검증하려는 서명된 PDF 파일 (`signed.pdf`) +- 베이츠 번호를 삽입할 일반 PDF (`input.pdf`) + +위 항목만 준비되었다면 바로 시작할 수 있습니다. 별도의 SDK나 숨겨진 설정 파일은 필요 없습니다. + +--- + +## 1단계: 프로젝트 설정 + +콘솔 프로젝트를 생성합니다: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +`Program.cs`를 열고 기본 코드를 모두 삭제합니다. 이후 전체 코드를 처음부터 작성하므로, 나중에 최종 버전을 복사‑붙여넣기 할 수 있습니다. + +--- + +## 2단계: PDF 서명 검증 + +### 검증이 중요한 이유 + +디지털 서명은 기본 인증서가 폐기되었거나 서명 후 문서가 변조된 경우 **위조될 수** 있습니다. Aspose.Pdf는 부울 값을 반환하는 편리한 `IsSignatureCompromised` 메서드를 제공하므로, 대부분의 감사 파이프라인에서 간단하면서도 강력하게 활용할 수 있습니다. + +### 코드 스니펫 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**설명** + +- `Document`는 PDF를 메모리로 로드합니다. +- `PdfFileSignature`는 문서를 감싸며 서명 관련 메서드를 제공합니다. +- `IsSignatureCompromised("Signature1")`은 *Signature1*이라는 서명의 무결성을 검사합니다. +- 반환된 부울 값은 서명이 여전히 신뢰할 수 있는지 여부를 알려줍니다. + +> **팁:** 서명 필드 이름이 확실하지 않다면 먼저 `pdfSignature.GetSignatureNames()`를 호출하세요. 모든 서명 식별자를 리스트로 반환합니다. + +--- + +## 3단계: 베이츠 번호 옵션 준비 + +### 베이츠 번호란? + +베이츠 번호는 법률·포렌식 문서의 각 페이지에 순차적으로 인쇄되는 식별자입니다. 발견 절차나 감사 과정에서 페이지를 손쉽게 참조할 수 있게 해줍니다. Aspose.Pdf의 `BatesNumberingOptions`를 사용하면 접두사, 시작 번호, 자리수, 정렬, 여백 등을 하나의 객체로 모두 설정할 수 있습니다. + +### 코드 이어쓰기 + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**설명** + +- `BatesNumberingOptions`는 모든 서식 옵션을 중앙에서 관리합니다. +- `AddBatesNumbering`은 각 페이지를 자동으로 순회하므로 별도의 루프가 필요 없습니다. +- `Prefix`(`INV-`)와 `StartNumber`(1000) 조합으로 `INV-01000`, `INV-01001` 같은 라벨이 생성됩니다. +- 페이지 하단에 번호 위치를 조정하려면 `BottomMargin`을 변경하세요. + +--- + +## 4단계: 전체 예제 실행 + +파일을 저장한 뒤 다음 명령을 실행합니다: + +```bash +dotnet run +``` + +두 개의 콘솔 출력이 나타납니다: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +첫 번째 라인이 `True`를 출력한다면 서명이 위조된 것입니다—즉 서명 후 문서가 변경되었거나 인증서가 더 이상 유효하지 않다는 의미입니다. 이 경우 이후 처리 흐름을 중단해야 합니다. + +--- + +## 5단계: 흔히 발생하는 상황 및 해결 방법 + +| 상황 | 주의할 점 | 권장 해결책 | +|-----------|-------------------|---------------| +| **다중 서명** | `IsSignatureCompromised`는 한 번에 하나의 필드만 검사합니다. | `pdfSignature.GetSignatureNames()`를 순회하며 각각 검증합니다. | +| **사용자 정의 서명 필드 이름** | `"Signature1"`이 실제 이름과 다르면 예외가 발생합니다. | 먼저 이름 목록을 가져오거나 Acrobat에서 확인한 정확한 이름을 사용합니다. | +| **대용량 PDF(100페이지 이상)** | 베이츠 번호 추가 시 메모리 사용량이 많아질 수 있습니다. | `Document.Save` 시 스트리밍을 활성화하는 `PdfSaveOptions { Compress = true }`를 사용합니다. | +| **접두사에 비라틴 문자 사용** | 기본 폰트가 유니코드를 지원하지 않을 수 있습니다. | `pdfWithBates.Font`를 `Arial Unicode MS`와 같은 유니코드 지원 폰트로 설정합니다. | +| **번호를 왼쪽에 배치하고 싶을 때** | 정렬이 `Right`로 고정되어 있습니다. | `BatesNumberingOptions`에서 `Alignment = HorizontalAlignment.Left` 로 변경합니다. | + +--- + +## 6단계: 결과 수동 확인 (선택) + +`BatesNumbered.pdf`를任意의 PDF 뷰어에서 엽니다: + +1. 페이지를 넘겨보며 각 페이지 오른쪽 하단에 **INV‑01000** 형태의 라벨이 표시되는지 확인합니다. +2. Acrobat의 **Signature Panel**을 열어 서명을 더블클릭하고, 콘솔 출력과 동일한 상태인지 확인합니다. + +모두 일치한다면 **PDF 서명 검증**과 **베이츠 번호 추가**를 한 번에 성공적으로 수행한 것입니다. + +--- + +## 자주 묻는 질문 + +**Q: 전체 문서를 로드하지 않고 서명을 검증할 수 있나요?** +A: Aspose.Pdf는 내부적으로 스트리밍을 사용하지만 `Document` 인스턴스가 필요합니다. 메모리 사용량을 최소화하려면 파일 스트림을 직접 `PdfFileSignature`에 전달하는 방식을 고려하세요. + +**Q: Aspose.Pdf 라이선스가 필요합니까?** +A: 평가판도 동작하지만 워터마크가 삽입됩니다. 프로덕션에서는 정식 라이선스를 적용해야 워터마크 없이 출력할 수 있습니다. + +**Q: 베이츠 번호를 일부 페이지에만 적용하려면 어떻게 하나요?** +A: `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })`와 같이 페이지 번호 배열을 전달하면 해당 페이지에만 번호가 삽입됩니다. + +--- + +## 결론 + +이제 Aspose.Pdf를 이용해 **PDF 서명 검증** 방법을 익혔고, 부울 결과가 의미하는 바를 이해했으며, **베이츠 번호 추가**를 자신 있게 수행할 수 있습니다. 전체 실행 가능한 예제는 두 작업을 하나의 콘솔 도구로 결합해 문서의 진위 여부를 확인하고 감사‑준비된 식별자를 삽입합니다. + +다음 단계로는 **신뢰할 수 있는 루트 스토어와 비교해 서명 검증**하거나, 대각선 스탬프·섹션별 접두사와 같은 **맞춤형 베이츠 번호 스타일**을 실험해볼 수 있습니다. 두 주제 모두 지금까지 다진 기반 위에 쌓아 올릴 수 있어 문서 처리 파이프라인을 더욱 견고하게 만들 것입니다. + +코딩을 즐기세요, 그리고 올바른 코드를 갖추면 서명 검증과 페이지 번호 매김은 식은 죽 먹기입니다! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/korean/net/printing-rendering/_index.md b/pdf/korean/net/printing-rendering/_index.md index 099f6ea81..ce85111c6 100644 --- a/pdf/korean/net/printing-rendering/_index.md +++ b/pdf/korean/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Aspose.PDF for .NET을 사용하여 PDF의 특정 페이지를 효율적으로 ### [Aspose.PDF for .NET을 사용하여 PDF에서 사용자 지정 확대/축소 비율 설정 - 완전한 가이드](./aspose-pdf-net-set-zoom-factor-pdfs/) Aspose.PDF for .NET을 사용하여 PDF 문서에 사용자 지정 확대/축소 비율을 설정하는 방법을 알아보세요. 이 가이드에서는 설치, 구현 단계 및 실제 적용 사례를 다룹니다. +### [C#에서 PDF를 렌더링하는 방법 – PNG, HTML 및 스탬핑 완전 가이드](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Aspose.PDF for .NET을 사용해 C#에서 PDF를 PNG와 HTML로 변환하고, 스탬프를 적용하는 전체 과정을 단계별로 안내합니다. + ## 추가 자료 - [Net 문서용 Aspose.PDF](https://docs.aspose.com/pdf/net/) diff --git a/pdf/korean/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/korean/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..65aa45b32 --- /dev/null +++ b/pdf/korean/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-04-02 +description: C#에서 Aspose.PDF를 사용하여 PDF를 렌더링하는 방법. PDF를 PNG로 렌더링하고, PDF를 HTML로 저장하며, + 자동 맞춤 텍스트 스탬프를 효율적으로 추가하는 방법을 배웁니다. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: ko +og_description: C#에서 Aspose.PDF를 사용하여 PDF를 렌더링하는 방법. 이 가이드는 PDF를 PNG로 렌더링하고, HTML로 + 저장하며, 자동 맞춤 텍스트 스탬프를 만드는 방법을 보여줍니다. +og_title: C#에서 PDF 렌더링 방법 – PNG, HTML 및 자동 맞춤 스탬프 +tags: +- Aspose.PDF +- C# +- PDF processing +title: C#에서 PDF 렌더링 방법 – PNG, HTML 및 스탬핑 완전 가이드 +url: /ko/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#에서 PDF 렌더링하기 – PNG, HTML 및 스탬핑 완전 가이드 + +한 번이라도 **PDF를 렌더링하는 방법**을 .NET 애플리케이션에서 글리프 하나도 놓치지 않고 궁금해 본 적 있나요? 빠른 `PdfRenderer`를 사용해 보았지만 문자 누락이 발생했거나, 썸네일용 선명한 PNG가 필요했지만 출력이 거칠게 보였을 수도 있습니다. 제 경험에 따르면, 올바른 렌더링 옵션과 폰트 처리가 깨진 미리보기와 픽셀‑완벽 이미지 사이의 차이를 만듭니다. + +이 튜토리얼에서는 Aspose.PDF for .NET을 사용한 세 가지 실제 시나리오를 살펴봅니다: 폰트 분석을 하면서 PDF 페이지를 PNG로 렌더링하기, 폰트를 자동으로 크기 조정하는 `TextStamp` 추가하기, 그리고 폰트의 CMap 테이블을 사용해 PDF를 HTML로 저장하기. 끝까지 따라오면 **PDF를 PNG로 렌더링**, **PDF 페이지 PNG 변환**, **PDF 페이지 이미지 내보내기**, 그리고 **PDF를 HTML로 저장**까지 문제없이 할 수 있게 됩니다. + +## Prerequisites + +- .NET 6.0 이상 (코드는 .NET Framework 4.6+에서도 작동합니다) +- Aspose.PDF for .NET NuGet 패키지 (`Install-Package Aspose.PDF`) +- 복잡한 폰트를 포함한 PDF 파일(예: `complexFonts.pdf`) – 렌더링 데모용 +- C# 및 Visual Studio(또는 선호하는 IDE)에 대한 기본 지식 + +> **Pro tip:** CI 서버를 사용 중이라면, 평가 워터마크를 방지하기 위해 Aspose 라이선스 파일을 리소스로 포함하거나 환경 변수로 참조하도록 하세요. + +--- + +## ## PDF를 폰트 분석과 함께 PNG로 렌더링하는 방법 + +### 왜 폰트를 분석해야 할까요? + +PDF에 사용자 정의 또는 임베디드 폰트가 포함된 경우, 단순한 렌더링은 렌더러가 매핑할 수 없는 글리프를 누락시킬 수 있습니다. `AnalyzeFonts`를 활성화하면 Aspose가 폰트 스트림을 검사하고 누락된 글리프를 대체하여 정확한 이미지를 보장합니다. + +### 단계별 구현 + +1. **`AnalyzeFonts`가 켜진 `PngDevice`를 생성합니다.** +2. **`Document`를 사용해 원본 PDF를 로드합니다.** +3. **원하는 페이지를 처리하고 PNG를 디스크에 저장합니다.** + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**예상 결과:** `YOUR_DIRECTORY`에 `rendered.png` 파일이 생성되며, 이는 `complexFonts.pdf`의 첫 페이지와 동일하게 모든 특수 문자와 다이아크리틱을 포함합니다. + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### 흔히 발생하는 문제 및 해결 방법 + +- **서버에 폰트가 없음:** PDF가 임베디드되지 않은 폰트를 참조하는 경우, 해당 폰트를 애플리케이션의 탐색 경로에 두거나 `FontRepository`를 사용해 사용자 지정 폴더를 지정하세요. +- **대용량 PDF:** 루프에서 여러 페이지를 렌더링하면 메모리를 많이 차지할 수 있습니다. 각 `Document` 인스턴스를 즉시 해제하거나 예시와 같이 `using` 블록을 사용하세요. + +--- + +## ## 자동 맞춤 TextStamp 추가 (동적 텍스트로 PDF 렌더링) + +### 언제 동적으로 크기가 조정되는 스탬프가 필요할까요? + +예를 들어 청구서를 생성하면서 텍스트 길이에 관계없이 선택한 사각형에 맞는 “PAID” 워터마크를 겹쳐야 한다고 상상해 보세요. 폰트 크기를 수동으로 계산하면 오류가 발생하기 쉽습니다; Aspose의 `AutoAdjustFontSizeToFitStampRectangle`가 이를 자동으로 처리합니다. + +### 단계별 구현 + +1. **`TextStamp`를 자동‑조정 속성으로 구성합니다.** +2. **스탬프를 적용할 대상 PDF를 로드합니다.** +3. **페이지에 스탬프를 추가하고 결과를 저장합니다.** + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**결과:** `stampAutoFit.pdf`는 원본 문자열 길이와 관계없이 300 × 150 pt 사각형에 완벽히 맞춰진 “Important notice” 텍스트를 포함합니다. + +#### 고려해야 할 엣지 케이스 + +- **매우 긴 문자열:** 가장 작은 폰트 크기에서도 텍스트가 사각형을 초과하면, Aspose는 `WordWrapMode`에 따라 텍스트를 잘라냅니다. 길이를 사전에 확인하거나 사각형 크기를 늘릴 수 있습니다. +- **다중 스탬프:** 동일한 `TextStamp` 인스턴스를 다른 페이지에서 재사용할 수 있지만, 위치 속성(`Left`, `Top`)은 마지막 값이 유지됩니다—필요에 따라 재설정하세요. + +--- + +## ## 폰트 CMap 테이블을 사용해 PDF를 HTML로 저장하기 + +### 왜 CMap 테이블을 사용해야 할까요? + +PDF를 HTML로 변환할 때, 검색 가능한 텍스트를 위해 Unicode 매핑을 유지하는 것이 중요합니다. CMap 기반 전략은 Aspose가 폰트 내부 문자 맵을 우선시하도록 하여 일반 인코딩보다 더 정확한 텍스트 추출을 제공합니다. + +### 단계별 구현 + +1. **CMap 기반 인코딩 규칙을 적용한 `HtmlSaveOptions`를 생성합니다.** +2. **원본 PDF를 로드합니다.** +3. **설정된 옵션을 사용해 HTML로 저장합니다.** + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**얻는 결과:** `SplitIntoPages`가 true인 경우 `cmapHtml.html` 및 관련 리소스를 포함한 폴더가 생성됩니다. 브라우저에서 HTML을 열면 원본 PDF와 거의 동일하게 선택 및 검색 가능한 텍스트를 확인할 수 있습니다. + +#### 깔끔한 HTML 내보내기 팁 + +- **이미지 vs. 벡터:** 더 선명한 그래픽을 위해 JPEG 대신 PNG를 원한다면 `RasterImagesSavingMode`를 `RasterImagesSavingMode.AsEmbeddedPartsOfPng`로 설정하세요. +- **대용량 PDF:** 각 페이지를 가볍게 유지하려면 `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages`를 사용하세요. + +--- + +## ## 전체 작업 예제 – 하나의 프로젝트에 세 시나리오 모두 구현 + +아래는 세 가지 기술을 나란히 보여주는 독립 실행형 콘솔 앱 예제입니다. 새 C# 콘솔 프로젝트에 복사·붙여넣기하고, Aspose.PDF NuGet 패키지를 추가한 뒤 파일 경로를 조정하세요. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +프로그램을 실행하면 다음을 확인할 수 있습니다: + +- `rendered.png` – 첫 번째 PDF 페이지의 완벽한 이미지. +- `stampAutoFit.pdf` – 동적으로 크기가 조정된 “Important notice” 스탬프가 적용된 원본 PDF. +- `cmapHtml.html` (페이지별 HTML 파일 포함) – 원본 텍스트 인코딩을 유지하는 HTML 버전. + +--- + +## ## 자주 묻는 질문 (FAQ) + +**Q: `AnalyzeFonts`가 렌더링 시간을 늘리나요?** +A: 약간 늘어나는데, Aspose가 각 폰트 스트림을 스캔하기 때문입니다. 누락된 글리프가 허용되지 않는 복잡한 PDF에서는 보통 그만한 가치가 있습니다. + +**Q: 루프에서 여러 페이지를 렌더링할 수 있나요?** +A: 물론 가능합니다. `sourcePdf.Pages`를 순회하면서 `pngDevice.Process(page, $"page{page.Number}.png")`를 호출하면 됩니다. 별도로 PDF를 열 경우 각 `Document`를 해제하는 것을 잊지 마세요. + +**Q: 만약** + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 2316b49e9..b89b56897 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. +### [Konwertuj PDF do HTML i zweryfikuj podpis PDF – Pełny przewodnik Aspose .NET](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Dowiedz się, jak konwertować PDF do HTML i weryfikować podpisy PDF 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/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/polish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..d665647a3 --- /dev/null +++ b/pdf/polish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,259 @@ +--- +category: general +date: 2026-04-02 +description: Konwertuj PDF na HTML, zachowując wektory, a następnie zweryfikuj podpis + PDF przy użyciu Aspose PDF. Naucz się konwersji PDF w Aspose i sprawdzania cyfrowego + podpisu PDF w C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: pl +og_description: Konwertuj PDF na HTML zachowując wektory i weryfikuj podpis PDF za + pomocą Aspose PDF. Krok po kroku kod C#, wskazówki i obsługa przypadków brzegowych. +og_title: Konwertuj PDF na HTML i zweryfikuj podpis PDF – Kompletny samouczek Aspose + .NET +tags: +- Aspose.PDF +- C# +- PDF processing +title: Konwertuj PDF do HTML i weryfikuj podpis PDF – Pełny przewodnik Aspose .NET +url: /pl/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Konwertuj PDF do HTML i weryfikuj podpis PDF – Kompletny samouczek Aspose .NET + +Kiedykolwiek potrzebowałeś **konwertować PDF do HTML**, ale obawiałeś się utraty jakości wektorowej lub uszkodzenia podpisów cyfrowych? Nie jesteś sam. Wielu programistów napotyka problem, gdy PDF zawiera wyłącznie grafikę wektorową lub podpis cyfrowy oparty na SHA‑3 — standardowe konwertery albo rasteryzują wszystko, albo całkowicie ignorują podpis. + +W tym przewodniku przeprowadzimy praktyczne rozwiązanie przy użyciu **Aspose.Pdf** dla .NET: najpierw usuniemy obrazy rastrowe, zamieniając PDF zawierający jedynie wektory w czysty HTML, a następnie pokażemy, jak **zweryfikować podpis PDF** (tak, ten oparty na SHA‑3‑256) i wyświetlić wynik w konsoli. Po zakończeniu będziesz mieć gotowy do uruchomienia program w C#, który wykonuje oba zadania, oraz kilka wskazówek, jak unikać typowych pułapek. + +## Czego będziesz potrzebować + +- **Aspose.Pdf for .NET** (najnowsza wersja na dzień 2026‑04, np. 23.12). +- Środowisko programistyczne .NET (Visual Studio 2022 lub VS Code z rozszerzeniem C#). +- Dwa przykładowe pliki PDF: + 1. `vectorOnly.pdf` – zawiera wyłącznie wektory i tekst, bez obrazów rastrowych. + 2. `signed_sha3.pdf` – cyfrowo podpisany przy użyciu hasha SHA‑3‑256. + +Nie są wymagane dodatkowe pakiety NuGet poza `Aspose.Pdf`. + +--- + +## Krok 1: Utwórz projekt i załaduj pliki PDF + +Utwórz nową aplikację konsolową, dodaj pakiet Aspose.Pdf z NuGet i zaimportuj niezbędne przestrzenie nazw. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Dlaczego to ważne*: Wczytanie dokumentów na początku pozwala nam ponownie używać obiektów zarówno do konwersji, jak i weryfikacji podpisu, co zmniejsza zużycie pamięci. + +--- + +## Krok 2: Konwertuj PDF do HTML, pomijając obrazy rastrowe + +`HtmlSaveOptions` z Aspose.Pdf daje precyzyjną kontrolę nad tym, jak obsługiwane są obrazy. Ustawienie `RasterImagesSavingMode` na `Skip` powoduje, że biblioteka całkowicie ignoruje obrazy rastrowe — idealne dla źródła zawierającego wyłącznie wektory. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Oczekiwany wynik**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Wskazówka*: Jeśli później będziesz musiał osadzić HTML na stronie internetowej, wygenerowany plik zawiera jedynie SVG i CSS — bez ciężkich plików PNG/JPEG. + +--- + +## Krok 3: Przygotuj obsługę podpisu + +Klasa `PdfFileSignature` z Aspose.Pdf jest punktem wejścia do wszelkich operacji związanych z podpisami cyfrowymi. Odczytuje słownik podpisu, wyciąga nazwę i pozwala zweryfikować go przy użyciu określonego algorytmu skrótu. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Dlaczego ten krok jest kluczowy*: Bez tego obiektu nie można wyliczyć podpisów ani wybrać wymaganego algorytmu skrótu (np. SHA‑3‑256). + +--- + +## Krok 4: Wylicz i zweryfikuj każdy podpis przy użyciu SHA‑3‑256 + +Metoda `GetSignNames()` zwraca wszystkie etykiety podpisów w PDF. Przejdź przez nie w pętli, wywołaj `VerifySignature` z `DigestHashAlgorithm.Sha3_256` i wypisz wynik. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Przykładowy wynik w konsoli**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Przypadek brzegowy*: Jeśli podpis używa innego skrótu (np. SHA‑256), weryfikacja zwróci `False`. Możesz dodać mechanizm awaryjny, próbując inne wartości `DigestHashAlgorithm` w pętli. + +--- + +## Krok 5: Pełny działający przykład (cały kod w jednym miejscu) + +Poniżej znajduje się kompletny program, który możesz skopiować do `Program.cs`. Zamień `YOUR_DIRECTORY` na rzeczywistą ścieżkę, w której znajdują się Twoje pliki PDF. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Uruchom program (`dotnet run` lub naciśnij **F5** w Visual Studio). Powinieneś zobaczyć potwierdzenie konwersji, a następnie wyniki weryfikacji podpisu. + +--- + +## Częste pytania i ich rozwiązania + +| Pytanie | Odpowiedź | +|----------|-----------| +| **Czy w HTML zachowane zostaną oryginalne czcionki?** | Aspose.Pdf domyślnie osadza użyte czcionki jako URI w formacie base‑64, więc wynik renderuje się poprawnie, nawet jeśli host nie posiada tych czcionek. | +| **Co zrobić, gdy mój PDF zawiera zarówno wektory *jak i* obrazy?** | Utrzymaj `RasterImagesSavingMode = Skip`, aby pominąć obrazy, lub zmień na `EmbedAll`, jeśli ich potrzebujesz. Opcja jest ustawiana per konwersję, więc możesz wykonać dwa przebiegi, aby uzyskać obie wersje. | +| **Mój podpis używa SHA‑512 — jak go zweryfikować?** | Zamień `DigestHashAlgorithm.Sha3_256` na `DigestHashAlgorithm.Sha512`. Możesz także wykryć algorytm z słownika podpisu i wybrać go dynamicznie. | +| **Czy da się uzyskać szczegóły certyfikatu podpisującego?** | Tak. Po weryfikacji wywołaj `signatureHandler.GetSignatureInfo(signName).Certificate`, aby pobrać certyfikat X.509 i sprawdzić pola takie jak `Subject` i `Issuer`. | +| **Co zrobić, gdy PDF jest zabezpieczony hasłem?** | Załaduj go tak: `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. Reszta przepływu pozostaje niezmieniona. | + +--- + +## Profesjonalne wskazówki dla kodu gotowego do produkcji + +1. **Poprawne zwalnianie zasobów** – Umieszczaj instancje `PdfDocument` w bloku `using` lub wywołuj `Dispose()`, aby zwolnić zasoby natywne. +2. **Przetwarzanie wsadowe** – Jeśli masz dziesiątki plików PDF, iteruj po katalogu, zapisz wyniki w CSV i równolegle przetwarzaj konwersję przy użyciu `Parallel.ForEach`. +3. **Logowanie** – Zastąp `Console.WriteLine` strukturalnym loggerem (Serilog, NLog) dla lepszej śledzalności, szczególnie przy weryfikacji wielu podpisów. +4. **Obsługa błędów** – Przechwytuj `Aspose.Pdf.Exceptions`, aby elegancko radzić sobie z uszkodzonymi plikami: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Zgodność wersji** – Aspose.Pdf szybko się rozwija. Zawsze testuj z dokładnie tą wersją, którą wskazałeś w `csproj`. Pokazane API działa w wersjach 23.x i nowszych. + +--- + +## Podsumowanie + +Właśnie **skonwertowaliśmy PDF do HTML**, zachowując wyłącznie wektory i tekst, oraz **zweryfikowaliśmy podpis PDF** przy użyciu algorytmu SHA‑3‑256 — wszystko przy użyciu kilku linijek C#. Najważniejsze wnioski: + +- Użyj `HtmlSaveOptions.RasterImagesSavingMode = Skip`, aby uzyskać czysty HTML oparty wyłącznie na wektorach. +- Skorzystaj z `PdfFileSignature` i `DigestHashAlgorithm.Sha3_256`, aby **sprawdzić podpis cyfrowy PDF** w sposób niezawodny. + +Od tego momentu możesz zgłębiać tematy pokrewne, takie jak **aspose pdf conversion** PDF‑ów do PNG, wyodrębnianie osadzonych plików czy budowanie usługi webowej przyjmującej PDF‑y i zwracającej zweryfikowane fragmenty HTML. + +Wypróbuj, dostosuj opcje i daj nam znać, co odkryłeś. Szczęśliwego kodowania! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/polish/net/digital-signatures/_index.md b/pdf/polish/net/digital-signatures/_index.md index 38fd2f4ad..ab7ce1ecf 100644 --- a/pdf/polish/net/digital-signatures/_index.md +++ b/pdf/polish/net/digital-signatures/_index.md @@ -56,14 +56,21 @@ Dowiedz się, jak weryfikować podpisy cyfrowe w plikach PDF za pomocą Aspose.P ### [Weryfikacja podpisu PDF w C# – przewodnik krok po kroku](./verify-pdf-signature-in-c-step-by-step-guide/) Dowiedz się, jak weryfikować podpisy PDF w C# przy użyciu Aspose.PDF dla .NET, krok po kroku. +### [Weryfikacja podpisu PDF i dodanie numeracji Bates – Kompletny przewodnik C#](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Dowiedz się, jak zweryfikować podpis PDF i jednocześnie dodać numerację Bates przy użyciu Aspose.PDF w C#. + ### [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. + ### [Ł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. ### [Weryfikacja podpisu PDF za pomocą Aspose – konwersja PDF do HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Dowiedz się, jak zweryfikować podpis PDF i jednocześnie przekonwertować dokument do formatu HTML przy użyciu Aspose.PDF. +### [Jak wyodrębnić podpisy z PDF – przewodnik Aspose C#](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Dowiedz się, jak wyodrębnić podpisy z plików PDF przy użyciu Aspose w C#. + ## Dodatkowe zasoby - [Aspose.PDF dla dokumentacji sieciowej](https://docs.aspose.com/pdf/net/) diff --git a/pdf/polish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/polish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..0f4c9bacf --- /dev/null +++ b/pdf/polish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-02 +description: Dowiedz się, jak wyodrębniać podpisy, dodawać pola, dodawać pustą stronę + PDF, jak dodawać widżety oraz zachować przezroczystość PDF przy użyciu Aspose.Pdf + w C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: pl +og_description: Jak wyodrębnić podpisy z pliku PDF i wykonać powiązane zadania, takie + jak dodawanie pól, pustych stron, widżetów oraz zachowanie przezroczystości przy + użyciu Aspose.Pdf. +og_title: Jak wyodrębnić podpisy z PDF – Przewodnik Aspose C# +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Jak wyodrębnić podpisy z PDF – przewodnik Aspose C# +url: /pl/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak wyodrębnić podpisy z PDF – Poradnik Aspose C# + +**Jak wyodrębnić podpisy z PDF** to częsty wymóg przy automatyzacji przetwarzania umów, zatwierdzania faktur czy dowolnego przepływu pracy opartego na podpisach cyfrowych. +W tym poradniku pokażemy także, **jak dodać pole**, **dodać pustą stronę PDF**, **jak dodać widget** oraz **zachować przezroczystość PDF** przy użyciu biblioteki Aspose.Pdf dla .NET. + +Wyobraź sobie, że każdej nocy otrzymujesz dziesiątki podpisanych PDF‑ów; ręczne otwieranie każdego pliku w celu weryfikacji podpisów byłoby koszmarem. Kilka linijek kodu C# pozwoli Ci programowo pobrać nazwy podpisów, zachować oryginalną grafikę oraz wzbogacić dokument o nowe pola formularza — wszystko bez uszkadzania istniejącej przezroczystości czy profili kolorów. + +> **Co otrzymasz:** kompletny, gotowy do uruchomienia przykład, który konwertuje PDF do PDF/X‑4 (zachowując przezroczystość), wyodrębnia wszystkie wbudowane nazwy podpisów, dodaje pustą stronę i tworzy pole tekstowe, które pojawia się w dwóch miejscach na tej samej stronie. + +## Wymagania wstępne + +- .NET 6.0 lub nowszy (kod działa także z .NET Framework) +- Aspose.Pdf dla .NET **v25.2** lub nowszy (wymagany dla `GetSignatureNames()`) +- Projekt w Visual Studio lub dowolne IDE C# +- Trzy przykładowe pliki PDF w folderze, którym zarządzasz: + - `source.pdf` – dowolny PDF, który chcesz skonwertować, zachowując przezroczystość + - `signed.pdf` – PDF już zawierający podpisy cyfrowe + - (opcjonalnie) pusty folder na pliki wyjściowe + +> **Pro tip:** Jeśli nie masz jeszcze licencjonowanej kopii, możesz poprosić o darmową tymczasową licencję na stronie Aspose. Tryb darmowy działa w testach, ale dodaje znak wodny. + +## Krok 1 – Zachowanie przezroczystości PDF poprzez konwersję do PDF/X‑4 + +Przezroczystość i wbudowane profile kolorów często giną przy spłaszczaniu PDF‑a. Konwersja do **PDF/X‑4** utrzymuje te elementy wizualne, co jest kluczowe dla dokumentów gotowych do druku. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Dlaczego to ważne:** +PDF/X‑4 jest standardem ISO dla wymiany grafiki, który zachowuje żywą przezroczystość. Korzystając z `PdfFormatConversionOptions`, unikamy typowego problemu rasteryzacji obiektów przezroczystych, co może dramatycznie zwiększyć rozmiar pliku i pogorszyć jakość. + +## Krok 2 – Jak wyodrębnić podpisy z PDF + +Aspose wprowadziło metodę `GetSignatureNames()` w wersji 25.2, co sprawia, że wyodrębnianie podpisów to jednowierszowy kod. Metoda zwraca tablicę logicznych nazw przypisanych do każdego pola podpisu cyfrowego. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**Co otrzymasz:** Jeśli `signed.pdf` zawiera dwa podpisy o nazwach *ManagerSig* i *ClientSig*, konsola wyświetli: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Obsługa przypadków brzegowych:** +- Jeśli PDF nie zawiera podpisów, `GetSignatureNames()` zwraca pustą tablicę – nie zostanie rzucony żaden wyjątek. +- W przypadku PDF‑ów z uszkodzonymi polami podpisu, możesz otoczyć wywołanie blokiem `try/catch` i zalogować błąd, nie przerywając całego procesu. + +## Krok 3 – Dodaj pustą stronę PDF i utwórz TextBox z wieloma widgetami + +Dodanie nowej strony jest proste, ale **jak dodać pole** i **jak dodać widget** jednocześnie wymaga nieco uwagi. *Widget* to wizualna reprezentacja pola formularza; możesz podpiąć kilka widgetów do tego samego logicznego pola, co pozwala na wyświetlanie tych samych danych w wielu miejscach. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Dlaczego używać wielu widgetów?** +Załóżmy, że ten sam komentarz ma pojawić się zarówno na przedniej, jak i tylnej stronie umowy. Przypisując dwa widgety do tego samego pola, każda zmiana wprowadzona przez użytkownika w jednym miejscu automatycznie aktualizuje drugie. + +**Typowe pułapki:** +- Zapomnienie o dodaniu pola do `newDoc.Form` spowoduje, że widget będzie niewidoczny w przeglądarkach PDF. +- Użycie identycznych współrzędnych prostokąta dla obu widgetów spowoduje ich nałożenie się – upewnij się, że wartości `Rectangle` różnią się. + +## Krok 4 – Wszystko razem: pełny, uruchamialny przykład + +Poniżej znajduje się pojedynczy program, który wykonuje wszystkie kroki w podanej kolejności. Skopiuj‑wklej go do nowego projektu konsolowego, dostosuj ścieżki i uruchom. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Oczekiwany wynik + +Po uruchomieniu programu powinieneś zobaczyć coś podobnego do: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Otwórz `TextBoxMultipleWidgets.pdf` w Adobe Acrobat Reader; zauważysz dwa identyczne pola tekstowe oznaczone **Comments** — jedno blisko góry, drugie nieco niżej. Wpisanie tekstu w jednym z nich natychmiast aktualizuje drugie. + +## Najczęściej zadawane pytania (FAQ) + +| Pytanie | Odpowiedź | +|----------|-----------| +| **Czy mogę wyodrębnić rzeczywiste bajty podpisu?** | `GetSignatureNames()` zwraca jedynie logiczne nazwy. Aby pobrać certyfikat lub wartość podpisu, potrzebujesz obiektów `SignatureField` (`document.Form["fieldName"] as SignatureField`). | +| **Czy konwersja do PDF/X‑4 działa na zaszyfrowanych PDF‑ach?** | Tak, pod warunkiem podania hasła poprzez `Document.Open(file, password)`. | +| **Co zrobić, jeśli potrzebuję więcej niż dwóch widgetów?** | Po prostu wywołaj `textBox.Widgets.Add()` dla każdego dodatkowego `WidgetAnnotation`. | +| **Czy pusta strona odziedziczy rozmiar strony z oryginalnego PDF?** | Nowa strona używa domyślnego rozmiaru (A4). Możesz przekazać obiekt `Page` z własnymi wymiarami, jeśli zajdzie taka potrzeba. | +| **Czy kod jest kompatybilny z .NET Core?** | Absolutnie — Aspose.Pdf jest wieloplatformowy. Wystarczy dodać pakiet NuGet do projektu .NET Core. | + +## Podsumowanie + +W tym poradniku pokazaliśmy, **jak wyodrębnić podpisy z PDF** oraz omówiliśmy **jak dodać pole**, **dodać pustą stronę PDF**, **jak dodać widget** i **zachować przezroczystość PDF** przy użyciu Aspose.Pdf dla C#. Masz teraz solidne, kompleksowe rozwiązanie, które możesz wstawić do dowolnego potoku przetwarzania dokumentów. + +Gotowy na kolejny wyzwanie? Spróbuj połączyć te techniki z modułem OCR Aspose, aby odczytywać tekst ze skanów + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/polish/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..daebbcbbd --- /dev/null +++ b/pdf/polish/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,225 @@ +--- +category: general +date: 2026-04-02 +description: Szybko zweryfikuj podpis PDF i dowiedz się, jak dodać numerację Batesa + przy użyciu Aspose.Pdf. Zawiera kod krok po kroku oraz wskazówki. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: pl +og_description: Szybko zweryfikuj podpis PDF i dowiedz się, jak dodać numerację Batesa + przy użyciu Aspose.Pdf. Przejrzyj pełny przykład i unikaj typowych pułapek. +og_title: Weryfikacja podpisu PDF i dodawanie numeracji Bates – Kompletny przewodnik + C# +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: Weryfikacja podpisu PDF i dodawanie numeracji Bates – Kompletny przewodnik + C# +url: /pl/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Sprawdź podpis PDF i dodaj numerację Bates – Kompletny przewodnik C# + +Czy kiedykolwiek potrzebowałeś **zweryfikować podpis PDF** przed wysłaniem umowy, ale nie byłeś pewien, którego wywołania API użyć? Nie jesteś sam — wielu programistów napotyka ten problem przy obsłudze prawnie wiążących dokumentów PDF. W tym samouczku przeprowadzimy Cię krok po kroku, jak **zweryfikować podpis PDF** przy użyciu Aspose.Pdf, a następnie pokażemy **jak dodać numerację Bates**, aby Twoje pliki były gotowe do audytu. + +Poruszymy również **jak zweryfikować podpis** programowo, omówimy **jak dodać numerację Bates** w jednym przebiegu i wyjaśnimy wyniki **check pdf signature**, abyś mógł zaufać wynikowi. Po zakończeniu będziesz mieć działającą aplikację konsolową C#, która wykonuje oba zadania — bez tajemnic, po prostu przejrzysty kod. + +--- + +## Czego będziesz potrzebować + +- **.NET 6.0** lub nowszy (przykład działa również z .NET Framework 4.7+) +- **Aspose.Pdf for .NET** pakiet NuGet (wersja 23.11 lub nowsza) +- Podpisany plik PDF (`signed.pdf`), który chcesz zweryfikować +- Zwykły plik PDF (`input.pdf`), który otrzyma numerację Bates + +Jeśli masz te elementy, możesz zaczynać. Nie potrzebujesz dodatkowych SDK, żadnych ukrytych plików konfiguracyjnych. + +--- + +## Krok 1: Konfiguracja projektu + +Rozpocznij od utworzenia projektu konsolowego: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Otwórz `Program.cs` i usuń domyślny kod. Zbudujemy wszystko od podstaw, abyś później mógł skopiować‑wkleić finalną wersję. + +--- + +## Krok 2: Weryfikacja podpisu PDF + +### Dlaczego weryfikacja ma znaczenie + +Podpis cyfrowy może być **naruszony**, jeśli podstawowy certyfikat został odwołany lub dokument został zmodyfikowany po podpisaniu. Aspose.Pdf udostępnia przydatną metodę `IsSignatureCompromised`, która zwraca wartość bool — prosta, a jednocześnie wystarczająco potężna dla większości procesów audytowych. + +### Fragment kodu + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Wyjaśnienie** + +- `Document` ładuje PDF do pamięci. +- `PdfFileSignature` otacza dokument i udostępnia metody związane z podpisem. +- `IsSignatureCompromised("Signature1")` sprawdza integralność podpisu o nazwie *Signature1*. +- Wynik typu bool informuje, czy podpis jest nadal godny zaufania. + +> **Pro tip:** Jeśli nie jesteś pewien nazwy pola podpisu, najpierw wywołaj `pdfSignature.GetSignatureNames()`; zwróci ona listę wszystkich identyfikatorów podpisów. + +--- + +## Krok 3: Przygotowanie opcji numeracji Bates + +### Co to jest numeracja Bates? + +Numery Bates to kolejno przydzielane identyfikatory drukowane na każdej stronie dokumentu prawnego lub forensycznego. Ułatwiają odwoływanie się do stron podczas postępowania dowodowego lub audytu. `BatesNumberingOptions` z Aspose.Pdf pozwala dostosować prefiks, numer początkowy, liczbę cyfr, wyrównanie i margines — wszystko w jednym obiekcie. + +### Kontynuacja kodu + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Wyjaśnienie** + +- `BatesNumberingOptions` centralizuje wszystkie opcje formatowania. +- `AddBatesNumbering` automatycznie iteruje po każdej stronie — nie ma potrzeby ręcznej pętli. +- `Prefix` (`INV-`) i `StartNumber` (1000) generują etykiety takie jak `INV-01000`, `INV-01001` itd. +- Dostosuj `BottomMargin`, jeśli potrzebujesz, aby numer był wyżej lub niżej na stronie. + +--- + +## Krok 4: Uruchomienie pełnego przykładu + +Zapisz plik, a następnie uruchom: + +```bash +dotnet run +``` + +Powinieneś zobaczyć dwa wiersze w konsoli: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Jeśli pierwszy wiersz wypisze `True`, podpis jest naruszony — oznacza to, że dokument mógł zostać zmieniony po podpisaniu lub certyfikat nie jest już ważny. W takim przypadku przerwij dalsze przetwarzanie. + +--- + +## Krok 5: Typowe przypadki brzegowe i jak sobie z nimi radzić + +| Sytuacja | Na co zwrócić uwagę | Sugerowane rozwiązanie | +|-----------|-------------------|---------------| +| **Wiele podpisów** | `IsSignatureCompromised` sprawdza tylko jedno pole naraz. | Przejdź pętlą po `pdfSignature.GetSignatureNames()` i zweryfikuj każdy. | +| **Niestandardowa nazwa pola podpisu** | Użycie `"Signature1"` może spowodować wyjątek, jeśli nazwa jest inna. | Najpierw pobierz listę nazw lub przekaż dokładną nazwę widoczną w Acrobat. | +| **Duże pliki PDF (100+ stron)** | Dodawanie numeracji Bates może być intensywne pod względem pamięci. | Użyj `Document.Save` z `SaveOptions` umożliwiającymi strumieniowanie (`PdfSaveOptions { Compress = true }`). | +| **Znaki niełacińskie w prefiksie** | Niektóre czcionki nie obsługują Unicode domyślnie. | Ustaw `pdfWithBates.Font` na czcionkę obsługującą Unicode, np. `Arial Unicode MS`. | +| **Potrzeba umieszczenia numerów po lewej** | Wyrównanie jest na stałe ustawione na `Right`. | Zmień `Alignment = HorizontalAlignment.Left` w `BatesNumberingOptions`. | + +--- + +## Krok 6: Ręczna weryfikacja wyniku (opcjonalnie) + +Otwórz `BatesNumbered.pdf` w dowolnym przeglądarce PDF: + +1. Przeglądaj strony — każda powinna wyświetlać etykietę taką jak **INV‑01000** w prawym dolnym rogu. +2. Skorzystaj z **Panelu podpisów** w Acrobat, dwukrotnie kliknij podpis i potwierdź, że status zgadza się z wynikiem w konsoli. + +Jeśli wszystko się zgadza, pomyślnie sprawdziłeś **check pdf signature** i zastosowałeś **add bates numbering** w jednym kroku. + +--- + +## Najczęściej zadawane pytania + +**P: Czy mogę zweryfikować podpis bez ładowania całego dokumentu?** +O: Aspose.Pdf strumieniuje plik w tle, ale nadal potrzebujesz instancji `Document`. W przypadku bardzo dużych plików rozważ użycie `PdfFileSignature` bezpośrednio z strumieniem pliku, aby zmniejszyć zużycie pamięci. + +**P: Czy potrzebuję licencji na Aspose.Pdf?** +O: Dostępna jest darmowa wersja ewaluacyjna, ale dodaje znak wodny. W środowisku produkcyjnym potrzebna jest pełna licencja; w przeciwnym razie wygenerowane PDF-y będą zawierały baner Aspose. + +**P: Co zrobić, jeśli muszę dodać numerację Bates tylko do wybranej grupy stron?** +O: Użyj `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })`, gdzie tablica zawiera numery stron, które mają być ponumerowane. + +--- + +## Podsumowanie + +Teraz wiesz, **jak zweryfikować podpis PDF** przy użyciu Aspose.Pdf, rozumiesz znaczenie wyniku typu bool i możesz pewnie **dodać numerację Bates** do dowolnego PDF, którym zarządzasz. Pełny, działający przykład łączy oba zadania, dając Ci jedną konsolową aplikację, która sprawdza autentyczność dokumentu i znakowanie go identyfikatorami gotowymi do audytu. + +Następnie możesz zbadać **jak zweryfikować podpis** względem zaufanego magazynu certyfikatów lub poeksperymentować z własnymi stylami **add bates numbering**, takimi jak znaki ukośne czy prefiksy per‑sekcja. Oba tematy opierają się na fundamentach, które właśnie opanowałeś, i uczynią Twój potok przetwarzania dokumentów jeszcze bardziej solidnym. + +Miłego kodowania i pamiętaj — sprawdzanie podpisów i numerowanie stron to bułka z masłem, gdy masz odpowiedni kod! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/polish/net/printing-rendering/_index.md index 68e6c8695..34f24113c 100644 --- a/pdf/polish/net/printing-rendering/_index.md +++ b/pdf/polish/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Dowiedz się, jak wydajnie drukować określone strony pliku PDF za pomocą Aspo ### [Ustawianie niestandardowego współczynnika powiększenia w plikach PDF za pomocą Aspose.PDF dla .NET — kompletny przewodnik](./aspose-pdf-net-set-zoom-factor-pdfs/) Dowiedz się, jak ustawić niestandardowy współczynnik powiększenia w dokumentach PDF za pomocą Aspose.PDF dla .NET. Ten przewodnik obejmuje instalację, kroki implementacji i praktyczne zastosowania. +### [Jak renderować PDF w C# – Kompletny przewodnik po PNG, HTML i znakowaniu](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Dowiedz się, jak renderować pliki PDF w C# do formatu PNG, HTML oraz jak dodawać znaki wodne, korzystając z Aspose.PDF. + ## Dodatkowe zasoby - [Aspose.PDF dla dokumentacji sieciowej](https://docs.aspose.com/pdf/net/) diff --git a/pdf/polish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/polish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..ebb788977 --- /dev/null +++ b/pdf/polish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-04-02 +description: Jak renderować PDF przy użyciu Aspose.PDF w C#. Dowiedz się, jak renderować + PDF do PNG, zapisywać PDF jako HTML oraz efektywnie dodawać automatycznie dopasowywane + znaczniki tekstowe. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: pl +og_description: Jak renderować PDF przy użyciu Aspose.PDF w C#. Ten przewodnik pokazuje + renderowanie PDF do PNG, zapisywanie jako HTML oraz tworzenie automatycznie dopasowywanych + stempli tekstowych. +og_title: Jak renderować PDF w C# – PNG, HTML i automatycznie dopasowane pieczątki +tags: +- Aspose.PDF +- C# +- PDF processing +title: Jak renderować PDF w C# – Kompletny przewodnik po PNG, HTML i znakowaniu +url: /pl/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak renderować PDF w C# – Kompletny przewodnik po PNG, HTML i Stemplowaniu + +Zastanawiałeś się kiedyś **jak renderować PDF** w aplikacji .NET bez utraty żadnego glifu? Może próbowałeś szybkiego `PdfRenderer` i zauważyłeś brakujące znaki, albo potrzebujesz wyraźnego PNG jako miniaturki, a wynik wygląda ząbkowanie. Z mojego doświadczenia wynika, że odpowiednia kombinacja opcji renderowania i obsługi czcionek decyduje o różnicy między zepsutym podglądem a obrazem piksel‑perfekcyjnym. + +W tym tutorialu przejdziemy przez trzy scenariusze w praktyce z Aspose.PDF for .NET: renderowanie strony PDF do PNG przy analizie czcionek, dodanie `TextStamp`, który automatycznie dopasowuje rozmiar czcionki, oraz zapis PDF jako HTML przy użyciu tabeli CMap czcionki. Po zakończeniu będziesz potrafił **renderować PDF do PNG**, **konwertować stronę PDF na PNG**, **eksportować obraz strony PDF**, a nawet **zapisować PDF jako HTML** bez problemów. + +## Prerequisites + +- .NET 6.0 lub nowszy (kod działa także na .NET Framework 4.6+) +- Pakiet NuGet Aspose.PDF for .NET (`Install-Package Aspose.PDF`) +- Plik PDF z złożonymi czcionkami (np. `complexFonts.pdf`) do demonstracji renderowania +- Podstawowa znajomość C# i Visual Studio (lub dowolnego ulubionego IDE) + +> **Pro tip:** Jeśli pracujesz na serwerze CI, upewnij się, że plik licencji Aspose jest albo osadzony jako zasób, albo odwołany przez zmienną środowiskową, aby uniknąć znaków wodnych wersji ewaluacyjnej. + +--- + +## ## Jak renderować PDF do PNG z analizą czcionek + +### Dlaczego analizować czcionki? + +Gdy PDF zawiera własne lub osadzone czcionki, prosty render może pominąć glify, których renderer nie potrafi zmapować. Włączenie `AnalyzeFonts` zmusza Aspose do przeglądania strumieni czcionek i podstawiania brakujących glifów, co gwarantuje wierny obraz. + +### Implementacja krok po kroku + +1. **Utwórz `PngDevice` z włączonym `AnalyzeFonts`.** +2. **Załaduj źródłowy PDF** przy użyciu `Document`. +3. **Przetwórz wybraną stronę** i zapisz PNG na dysku. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**Co powinieneś zobaczyć:** Plik o nazwie `rendered.png` w katalogu `YOUR_DIRECTORY`, który wygląda identycznie jak pierwsza strona `complexFonts.pdf`, łącznie ze wszystkimi specjalnymi znakami i diakrytami. + +![Strona PDF wyrenderowana jako obraz PNG](rendered.png "Strona PDF wyrenderowana jako obraz PNG") + +#### Typowe pułapki i jak ich unikać + +- **Brakujące czcionki na serwerze:** Jeśli PDF odwołuje się do czcionek, które nie są osadzone, umieść te czcionki w ścieżce przeszukiwania aplikacji lub włącz `FontRepository`, aby wskazać własny folder. +- **Duże pliki PDF:** Renderowanie wielu stron w pętli może zużywać dużo pamięci; zwalniaj każdą instancję `Document` niezwłocznie lub używaj bloków `using`, jak pokazano. + +--- + +## ## Dodawanie automatycznie dopasowywanego TextStamp (Render PDF z dynamicznym tekstem) + +### Kiedy potrzebny jest dynamicznie rozmiarowany stempel? + +Wyobraź sobie, że generujesz faktury i musisz nałożyć znak wodny „PAID”, który pasuje do dowolnego prostokąta, niezależnie od długości tekstu. Ręczne obliczanie rozmiaru czcionki jest podatne na błędy; `AutoAdjustFontSizeToFitStampRectangle` w Aspose robi tę pracę za Ciebie. + +### Implementacja krok po kroku + +1. **Skonfiguruj `TextStamp`** z właściwościami auto‑dopasowania. +2. **Załaduj docelowy PDF**, który chcesz otoczyć stemplem. +3. **Dodaj stempel do strony** i zapisz wynik. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Rezultat:** `stampAutoFit.pdf` zawiera tekst „Important notice” idealnie dopasowany do prostokąta 300 × 150 pt, niezależnie od pierwotnej długości łańcucha. + +#### Przypadki brzegowe do rozważenia + +- **Bardzo długie ciągi znaków:** Jeśli tekst przekracza prostokąt nawet przy najmniejszym rozmiarze czcionki, Aspose przytnie go zgodnie z `WordWrapMode`. Możesz wcześniej sprawdzić długość lub zwiększyć rozmiar prostokąta. +- **Wiele stempli:** Ponowne użycie tej samej instancji `TextStamp` na różnych stronach działa, ale pamiętaj, że właściwości pozycji (`Left`, `Top`) zachowują ostatnie wartości — zresetuj je w razie potrzeby. + +--- + +## ## Zapis PDF jako HTML przy użyciu tabeli CMap czcionki + +### Po co nam tabela CMap? + +Podczas konwersji PDF do HTML zachowanie mapowania Unicode jest kluczowe dla tekstu przeszukiwalnego. Strategia oparta na CMap zmusza Aspose do priorytetyzacji wewnętrznej mapy znaków czcionki, co często daje dokładniejsze wyodrębnianie tekstu niż ogólne kodowanie. + +### Implementacja krok po kroku + +1. **Utwórz `HtmlSaveOptions`** z regułą kodowania opartą na CMap. +2. **Załaduj źródłowy PDF**. +3. **Zapisz jako HTML** używając skonfigurowanych opcji. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**Co otrzymasz:** Folder (jeśli `SplitIntoPages` jest ustawione na true) zawierający `cmapHtml.html` oraz powiązane zasoby. Otwórz HTML w przeglądarce, a zauważysz, że tekst jest zaznaczalny i przeszukiwalny, prawie identyczny z oryginalnym PDF. + +#### Wskazówki dla czystego eksportu HTML + +- **Obrazy vs. wektory:** Ustaw `RasterImagesSavingMode` na `RasterImagesSavingMode.AsEmbeddedPartsOfPng`, jeśli wolisz PNG‑y zamiast JPEG‑ów dla ostrzejszej grafiki. +- **Duże pliki PDF:** Skorzystaj z `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages`, aby każda strona była lekka. + +--- + +## ## Pełny działający przykład – wszystkie trzy scenariusze w jednym projekcie + +Poniżej znajduje się samodzielna aplikacja konsolowa demonstrująca trzy techniki jednocześnie. Skopiuj‑wklej ją do nowego projektu C# typu console, dodaj pakiet NuGet Aspose.PDF i dostosuj ścieżki plików. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Uruchom program, a znajdziesz: + +- `rendered.png` – idealny obraz pierwszej strony PDF. +- `stampAutoFit.pdf` – oryginalny PDF z dynamicznie rozmiarowanym stemplem „Important notice”. +- `cmapHtml.html` (plus pliki HTML poszczególnych stron) – wersja HTML zachowująca pierwotne kodowanie tekstu. + +--- + +## ## Najczęściej zadawane pytania (FAQ) + +**Q: Czy `AnalyzeFonts` wydłuża czas renderowania?** +A: Nieco, ponieważ Aspose skanuje każdy strumień czcionki. Kompromis zazwyczaj jest tego wart przy złożonych PDF‑ach, gdzie brakujące glify są nieakceptowalne. + +**Q: Czy mogę renderować wiele stron w pętli?** +A: Oczywiście. Wystarczy iterować po `sourcePdf.Pages` i wywołać `pngDevice.Process(page, $"page{page.Number}.png")`. Pamiętaj o zwalnianiu każdej instancji `Document`, jeśli otwierasz je osobno. + +**Q: Co jeśli + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 ed681c816..2b0fbbcb1 100644 --- a/pdf/portuguese/net/conversion-export/_index.md +++ b/pdf/portuguese/net/conversion-export/_index.md @@ -224,6 +224,9 @@ Domine a conversão de PDF para HTML usando o Aspose.PDF para .NET. Melhore a ac ### [Conversão de PDF para HTML com Aspose.PDF para .NET](./pdf-to-html-conversion-aspose-dot-net/) Um tutorial de código para Aspose.PDF Net +### [Converter PDF para HTML e Verificar Assinatura de PDF – Guia Completo Aspose .NET](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Aprenda a converter PDFs para HTML e validar assinaturas digitais usando Aspose.PDF para .NET em um guia completo. + ### [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. diff --git a/pdf/portuguese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/portuguese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..5399a7428 --- /dev/null +++ b/pdf/portuguese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,260 @@ +--- +category: general +date: 2026-04-02 +description: Converter PDF para HTML mantendo vetores, depois verificar a assinatura + do PDF usando Aspose PDF. Aprenda a conversão de PDF com Aspose e verifique a assinatura + digital do PDF em C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: pt +og_description: Converter PDF para HTML preservando vetores e verificar assinatura + de PDF com Aspose PDF. Código C# passo a passo, dicas e tratamento de casos extremos. +og_title: Converter PDF para HTML e Verificar Assinatura de PDF – Tutorial Completo + de Aspose .NET +tags: +- Aspose.PDF +- C# +- PDF processing +title: Converter PDF para HTML e Verificar Assinatura de PDF – Guia Completo Aspose + .NET +url: /pt/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Converter PDF para HTML e Verificar Assinatura PDF – Tutorial Completo Aspose .NET + +Já precisou **converter PDF para HTML** mas ficou preocupado em perder a qualidade vetorial ou quebrar assinaturas digitais? Você não está sozinho. Muitos desenvolvedores se deparam com um obstáculo quando um PDF contém apenas gráficos vetoriais ou uma assinatura digital baseada em SHA‑3 — os conversores padrão ou rasterizam tudo ou ignoram completamente a assinatura. + +Neste guia vamos percorrer uma solução prática usando **Aspose.Pdf** para .NET: primeiro vamos remover as imagens raster enquanto transformamos um PDF somente vetorial em HTML limpo, depois vamos mostrar como **verificar assinatura PDF** (sim, a SHA‑3‑256) e exibir o resultado no console. Ao final você terá um programa C# pronto‑para‑executar que realiza ambas as tarefas, além de algumas dicas para evitar armadilhas comuns. + +## O que Você Precisa + +- **Aspose.Pdf for .NET** (a versão mais recente em 2026‑04, por exemplo, 23.12). +- Um ambiente de desenvolvimento .NET (Visual Studio 2022 ou VS Code com a extensão C#). +- Dois PDFs de exemplo: + 1. `vectorOnly.pdf` – contém apenas vetores e texto, sem imagens raster. + 2. `signed_sha3.pdf` – assinado digitalmente com hash SHA‑3‑256. + +Nenhum pacote NuGet extra além do `Aspose.Pdf` é necessário. + +--- + +## Etapa 1: Configurar o Projeto e Carregar os PDFs + +Crie um novo aplicativo console, adicione o NuGet Aspose.Pdf e importe os namespaces necessários. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Por que isso importa*: Carregar os documentos antecipadamente nos permite reutilizar os objetos tanto para a conversão quanto para a verificação da assinatura, mantendo o uso de memória baixo. + +--- + +## Etapa 2: Converter PDF para HTML Ignorando Imagens Raster + +O `HtmlSaveOptions` da Aspose.Pdf oferece controle granular sobre como as imagens são tratadas. Definir `RasterImagesSavingMode` como `Skip` instrui a biblioteca a ignorar completamente as imagens raster — perfeito para uma fonte somente vetorial. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Saída esperada**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Dica de especialista*: Se mais tarde precisar incorporar o HTML em uma página web, o arquivo gerado contém apenas SVG e CSS — sem blobs volumosos de PNG/JPEG. + +--- + +## Etapa 3: Preparar o Manipulador de Assinatura + +A classe `PdfFileSignature` da Aspose.Pdf é o ponto de entrada para qualquer trabalho com assinatura digital. Ela lê o dicionário de assinatura, extrai o nome e permite verificar usando um algoritmo de hash específico. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Por que esta etapa é crucial*: Sem o manipulador você não pode enumerar assinaturas nem escolher o algoritmo de hash que precisa (por exemplo, SHA‑3‑256). + +--- + +## Etapa 4: Enumerar e Verificar Cada Assinatura Usando SHA‑3‑256 + +O método `GetSignNames()` retorna todos os rótulos de assinatura no PDF. Percorra‑os, chame `VerifySignature` com `DigestHashAlgorithm.Sha3_256` e imprima o resultado. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Exemplo de saída no console**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Caso extremo*: Se uma assinatura usar um hash diferente (por exemplo, SHA‑256) a verificação retornará `False`. Você pode adicionar uma verificação de fallback tentando outros valores de `DigestHashAlgorithm` dentro do loop. + +--- + +## Etapa 5: Exemplo Completo (Todo o Código em Um Só Lugar) + +Abaixo está o programa completo que você pode copiar‑colar em `Program.cs`. Substitua `YOUR_DIRECTORY` pela pasta real onde seus PDFs estão. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Execute o programa (`dotnet run` ou pressione **F5** no Visual Studio). Você deverá ver a confirmação da conversão seguida dos resultados da verificação da assinatura. + +--- + +## Perguntas Frequentes & Como Resolvê‑las + +| Pergunta | Resposta | +|----------|----------| +| **O HTML ainda conterá as fontes originais?** | Aspose.Pdf incorpora as fontes usadas como URIs de dados base‑64 por padrão, então a saída é renderizada corretamente mesmo que a máquina host não possua essas fontes. | +| **E se meu PDF tiver vetores *e* imagens?** | Mantenha `RasterImagesSavingMode = Skip` para descartar imagens, ou altere para `EmbedAll` se precisar delas. A opção é por conversão, então você pode executar duas passagens se precisar de ambas as versões. | +| **Minha assinatura usa SHA‑512 — como verifico?** | Substitua `DigestHashAlgorithm.Sha3_256` por `DigestHashAlgorithm.Sha512`. Você pode até detectar o algoritmo a partir do dicionário de assinatura e escolher dinamicamente. | +| **Existe uma forma de obter detalhes do certificado do assinante?** | Sim. Após a verificação, chame `signatureHandler.GetSignatureInfo(signName).Certificate` para recuperar o certificado X.509 e inspecionar campos como `Subject` e `Issuer`. | +| **E se o PDF estiver protegido por senha?** | Carregue‑o com `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. O restante do fluxo permanece o mesmo. | + +--- + +## Dicas Profissionais para Código Pronto para Produção + +1. **Dispose PDFs Corretamente** – Envolva as instâncias de `PdfDocument` em um bloco `using` ou chame `Dispose()` para liberar recursos nativos. +2. **Processamento em Lote** – Se você tem dezenas de PDFs, itere sobre um diretório, armazene os resultados em um CSV e paralelize a conversão com `Parallel.ForEach`. +3. **Logging** – Substitua `Console.WriteLine` por um logger estruturado (Serilog, NLog) para melhor rastreabilidade, especialmente ao verificar muitas assinaturas. +4. **Tratamento de Erros** – Capture `Aspose.Pdf.Exceptions` para lidar graciosamente com arquivos corrompidos: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Compatibilidade de Versão** – Aspose.Pdf evolui rapidamente. Sempre teste com a versão exata referenciada no seu `csproj`. A API mostrada funciona para 23.x e posteriores. + +--- + +## Conclusão + +Acabamos de **converter PDF para HTML** preservando apenas vetores e texto, e de **verificar assinatura PDF** usando o algoritmo SHA‑3‑256 — tudo com algumas linhas de C#. Os principais aprendizados são: + +- Use `HtmlSaveOptions.RasterImagesSavingMode = Skip` para obter HTML limpo somente vetorial. +- Aproveite `PdfFileSignature` e `DigestHashAlgorithm.Sha3_256` para **verificar assinatura digital PDF** de forma confiável. + +A partir daqui você pode explorar tópicos relacionados, como **aspose pdf conversion** de PDFs para PNG, extração de arquivos incorporados, ou a criação de um serviço web que aceita PDFs e devolve trechos de HTML verificados. + +Experimente, ajuste as opções e nos conte o que descobriu. Feliz codificação! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/portuguese/net/digital-signatures/_index.md b/pdf/portuguese/net/digital-signatures/_index.md index 2a6e4f62c..f4dc5c9bc 100644 --- a/pdf/portuguese/net/digital-signatures/_index.md +++ b/pdf/portuguese/net/digital-signatures/_index.md @@ -35,6 +35,9 @@ Aprenda a criar, assinar e verificar assinaturas de PDF com segurança com o Asp ### [Como extrair informações de assinatura de PDF usando Aspose.PDF .NET: um guia passo a passo](./extract-pdf-signature-info-aspose-pdf-net/) Aprenda a extrair informações de assinatura digital de PDFs usando o Aspose.PDF para .NET. Este guia passo a passo aborda instalação, implementação e aplicações práticas. +### [Como extrair assinaturas de PDF – Guia Aspose C#](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Aprenda a extrair assinaturas de arquivos PDF usando Aspose.PDF com C#, passo a passo. + ### [Como implementar assinaturas digitais em .NET com Aspose.PDF: um guia completo](./implement-pdf-signatures-dotnet-aspose-pdf-guide/) Aprenda a implementar assinaturas digitais seguras em PDFs usando o Aspose.PDF para .NET, incluindo a supressão de campos opcionais. @@ -58,12 +61,16 @@ Aprenda a verificar assinaturas digitais em arquivos PDF usando o Aspose.PDF par ### [Verificar assinatura de PDF em C# – Guia completo para validar assinatura digital de PDF](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) Aprenda a validar assinaturas digitais em PDFs usando C#, com exemplos passo a passo e melhores práticas. + ### [Carregar documento PDF C# – Converter para PDF/X‑4 e listar assinaturas](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) Aprenda a carregar um PDF em C#, convertê‑lo para o padrão PDF/X‑4 e listar as assinaturas presentes. ### [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. +### [Verificar assinatura de PDF e adicionar numeração Bates – Guia completo em C#](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Aprenda a verificar assinaturas de PDF e adicionar numeração Bates em C# usando Aspose.PDF. + ## 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-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/portuguese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..a37e7d274 --- /dev/null +++ b/pdf/portuguese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-02 +description: Aprenda como extrair assinaturas, adicionar campo, inserir página em + branco no PDF, como adicionar widget e preservar a transparência do PDF usando Aspose.Pdf + em C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: pt +og_description: Como extrair assinaturas de um PDF e realizar tarefas relacionadas, + como adicionar campos, páginas em branco, widgets e preservar a transparência usando + Aspose.Pdf. +og_title: Como Extrair Assinaturas de PDF – Guia Aspose C# +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Como Extrair Assinaturas de PDF – Guia Aspose C# +url: /pt/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como Extrair Assinaturas de PDF – Guia Aspose C# + +**Como extrair assinaturas de um PDF** é uma necessidade comum quando você está automatizando o processamento de contratos, aprovações de faturas ou qualquer fluxo de trabalho que dependa de assinaturas digitais. +Neste guia também abordaremos **como adicionar campo**, **adicionar página em branco PDF**, **como adicionar widget** e **preservar transparência PDF** usando a biblioteca Aspose.Pdf para .NET. + +Imagine que você recebe dezenas de PDFs assinados todas as noites; abrir manualmente cada arquivo para verificar as assinaturas seria um pesadelo. Com algumas linhas de código C# você pode obter programaticamente os nomes das assinaturas, manter seus gráficos originais intactos e ainda enriquecer o documento com novos campos de formulário — tudo sem quebrar a transparência ou os perfis de cor existentes. + +> **O que você receberá:** um exemplo completo e executável que converte um PDF para PDF/X‑4 (preservando transparência), extrai todos os nomes de assinaturas incorporadas, adiciona uma página em branco e cria um campo de caixa de texto que aparece em dois lugares na mesma página. + +## Pré-requisitos + +- .NET 6.0 ou posterior (o código funciona também com .NET Framework) +- Aspose.Pdf for .NET **v25.2** ou mais recente (necessário para `GetSignatureNames()`) +- Um projeto Visual Studio ou qualquer IDE C# +- Três PDFs de exemplo em uma pasta que você controla: + - `source.pdf` – qualquer PDF que você queira converter mantendo a transparência + - `signed.pdf` – um PDF que já contém assinaturas digitais + - (opcional) uma pasta vazia para os arquivos de saída + +> **Dica profissional:** Se ainda não possui uma cópia licenciada, pode solicitar uma licença temporária gratuita no site da Aspose. O modo gratuito funciona para testes, mas adiciona uma marca d’água. + +## Etapa 1 – Preservar Transparência PDF Convertendo para PDF/X‑4 + +A transparência e os perfis de cor incorporados costumam ser perdidos ao achatar um PDF. Converter para **PDF/X‑4** mantém esses elementos visuais intactos, o que é crucial para documentos prontos para impressão. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Por que isso importa:** +PDF/X‑4 é o padrão ISO para PDFs de intercâmbio gráfico que retêm transparência ao vivo. Ao usar `PdfFormatConversionOptions`, você evita a armadilha comum de rasterizar objetos transparentes, o que pode aumentar drasticamente o tamanho do arquivo e degradar a qualidade. + +## Etapa 2 – Como Extrair Assinaturas de um PDF + +A Aspose introduziu `GetSignatureNames()` na versão 25.2, tornando a extração de assinaturas uma única linha de código. O método retorna um array com os nomes lógicos atribuídos a cada campo de assinatura digital. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**O que esperar:** Se `signed.pdf` contiver duas assinaturas chamadas *ManagerSig* e *ClientSig*, o console exibirá: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Tratamento de casos extremos:** +- Se o PDF não possuir assinaturas, `GetSignatureNames()` retorna um array vazio – nenhuma exceção é lançada. +- Para PDFs com campos de assinatura corrompidos, você pode envolver a chamada em um `try/catch` e registrar o erro sem abortar todo o processo. + +## Etapa 3 – Adicionar Página em Branco PDF e Criar uma Caixa de Texto com Múltiplos Widgets + +Adicionar uma nova página é simples, mas **como adicionar campo** e **como adicionar widget** juntos requer um pouco de nuance. Um *widget* é a representação visual de um campo de formulário; você pode anexar vários widgets ao mesmo campo lógico, permitindo que os mesmos dados apareçam em múltiplas localizações. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Por que usar múltiplos widgets?** +Suponha que você precise que o mesmo comentário apareça tanto na frente quanto no verso de um contrato. Ao anexar dois widgets ao mesmo campo, qualquer alteração feita pelo usuário em um local atualiza automaticamente o outro. + +**Erros comuns:** +- Esquecer de adicionar o campo a `newDoc.Form` fará o widget ficar invisível nos visualizadores de PDF. +- Usar coordenadas de retângulo idênticas para ambos os widgets os empilhará um sobre o outro — certifique-se de que os valores de `Rectangle` sejam diferentes. + +## Etapa 4 – Juntando Tudo: Um Exemplo Completo e Executável + +A seguir está um programa único que executa cada etapa na ordem apresentada. Copie‑e‑cole em um novo projeto de console, ajuste os caminhos e execute. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Saída Esperada + +Ao executar o programa você deverá ver algo como: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Abra `TextBoxMultipleWidgets.pdf` no Adobe Acrobat Reader; você notará duas caixas de texto idênticas rotuladas **Comments** — uma perto do topo, outra um pouco mais abaixo. Digitar em uma atualiza a outra instantaneamente. + +## Perguntas Frequentes (FAQ) + +| Pergunta | Resposta | +|----------|----------| +| **Posso extrair os bytes reais da assinatura?** | `GetSignatureNames()` retorna apenas nomes lógicos. Para obter o certificado ou o valor da assinatura você precisa dos objetos `SignatureField` (`document.Form["fieldName"] as SignatureField`). | +| **A conversão para PDF/X‑4 funciona em PDFs criptografados?** | Sim, desde que você forneça a senha via `Document.Open(file, password)`. | +| **E se eu precisar de mais de dois widgets?** | Basta chamar `textBox.Widgets.Add()` para cada `WidgetAnnotation` adicional. | +| **A página em branco herdará o tamanho da página original do PDF?** | A nova página usa o tamanho padrão (A4). Você pode passar um objeto `Page` com dimensões personalizadas, se necessário. | +| **O código é compatível com .NET Core?** | Absolutamente — Aspose.Pdf é multiplataforma. Basta referenciar o pacote NuGet no seu projeto .NET Core. | + +## Conclusão + +Neste tutorial demonstramos **como extrair assinaturas de PDF**, ao mesmo tempo em que cobrimos **como adicionar campo**, **adicionar página em branco PDF**, **como adicionar widget** e **preservar transparência PDF** usando Aspose.Pdf para C#. Agora você tem uma solução sólida de ponta a ponta que pode ser inserida em qualquer pipeline de processamento de documentos. + +Pronto para o próximo desafio? Experimente combinar essas técnicas com o módulo OCR da Aspose para ler texto de documentos escaneados + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/portuguese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..1e188390a --- /dev/null +++ b/pdf/portuguese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,225 @@ +--- +category: general +date: 2026-04-02 +description: Verifique rapidamente a assinatura de PDF e aprenda como adicionar numeração + Bates usando Aspose.Pdf. Inclui código passo a passo e dicas. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: pt +og_description: Verifique rapidamente a assinatura de PDF e aprenda como adicionar + numeração Bates usando Aspose.Pdf. Siga o exemplo completo e evite armadilhas comuns. +og_title: Verificar assinatura de PDF e adicionar numeração Bates – Guia completo + em C# +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: Verificar assinatura de PDF e adicionar numeração Bates – Guia completo em + C# +url: /pt/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Verificar Assinatura PDF e Adicionar Numeração Bates – Guia Completo em C# + +Já precisou **verificar assinatura PDF** antes de enviar um contrato, mas não sabia qual chamada de API usar? Você não está sozinho—muitos desenvolvedores encontram esse obstáculo ao lidar com PDFs juridicamente vinculativos. Neste tutorial vamos mostrar passo a passo como **verificar assinatura PDF** com Aspose.Pdf e, em seguida, como **adicionar numeração bates** para que seus arquivos fiquem prontos para auditoria. + +Também abordaremos **como verificar assinatura** programaticamente, cobriremos **como adicionar bates** em uma única passagem e explicaremos os resultados de **check pdf signature** para que você possa confiar na saída. Ao final, você terá um aplicativo console C# executável que realiza ambas as tarefas—sem mistério, apenas código claro. + +--- + +## O que você precisará + +- **.NET 6.0** ou posterior (o exemplo também funciona com .NET Framework 4.7+). +- **Aspose.Pdf for .NET** pacote NuGet (versão 23.11 ou mais recente). +- Um arquivo PDF assinado (`signed.pdf`) que você deseja validar. +- Um PDF simples (`input.pdf`) que receberá a numeração Bates. + +Se você tem esses itens, está pronto para começar. Sem SDKs extras, sem arquivos de configuração ocultos. + +--- + +## Etapa 1: Configurar o Projeto + +Comece criando um projeto console: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Abra `Program.cs` e limpe o código padrão. Construiremos tudo do zero para que você possa copiar‑colar a versão final depois. + +--- + +## Etapa 2: Verificar Assinatura PDF + +### Por que a verificação é importante + +Uma assinatura digital pode ser **comprometida** se o certificado subjacente for revogado ou se o documento for adulterado após a assinatura. Aspose.Pdf fornece o método conveniente `IsSignatureCompromised` que retorna um booleano—simples, mas suficientemente poderoso para a maioria dos pipelines de auditoria. + +### Trecho de código + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Explanation** + +- `Document` carrega o PDF na memória. +- `PdfFileSignature` encapsula o documento e expõe métodos relacionados à assinatura. +- `IsSignatureCompromised("Signature1")` verifica a integridade da assinatura chamada *Signature1*. +- O resultado booleano indica se a assinatura ainda é confiável. + +> **Dica profissional:** Se você não tem certeza do nome do campo de assinatura, chame `pdfSignature.GetSignatureNames()` primeiro; ele retorna uma lista de todos os identificadores de assinatura. + +--- + +## Etapa 3: Preparar Opções de Numeração Bates + +### O que é numeração Bates? + +Os números Bates são identificadores sequenciais impressos em cada página de um documento legal ou forense. Eles facilitam a referência às páginas durante processos de descoberta ou auditoria. `BatesNumberingOptions` da Aspose.Pdf permite personalizar prefixo, número inicial, contagem de dígitos, alinhamento e margem—tudo em um único objeto. + +### Continuação do código + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Explanation** + +- `BatesNumberingOptions` centraliza todas as opções de formatação. +- `AddBatesNumbering` itera automaticamente sobre cada página—não há necessidade de um loop manual. +- O `Prefix` (`INV-`) e o `StartNumber` (1000) produzem rótulos como `INV-01000`, `INV-01001`, etc. +- Ajuste `BottomMargin` se precisar que o número fique mais alto ou mais baixo na página. + +--- + +## Etapa 4: Executar o Exemplo Completo + +Salve o arquivo e, em seguida, execute: + +```bash +dotnet run +``` + +Você deverá ver duas linhas no console: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Se a primeira linha imprimir `True`, a assinatura está comprometida—significando que o documento pode ter sido alterado após a assinatura ou que o certificado não é mais válido. Nesse caso, interrompa qualquer processamento subsequente. + +--- + +## Etapa 5: Casos de Borda Comuns e Como Lidar com Eles + +| Situação | O que observar | Correção sugerida | +|-----------|-------------------|---------------| +| **Múltiplas assinaturas** | `IsSignatureCompromised` verifica apenas um campo por vez. | Itere sobre `pdfSignature.GetSignatureNames()` e verifique cada uma. | +| **Nome de campo de assinatura personalizado** | Usar `"Signature1"` pode gerar uma exceção se o nome for diferente. | Recupere a lista de nomes primeiro, ou passe o nome exato que você vê no Acrobat. | +| **PDFs grandes (100+ páginas)** | Adicionar numeração Bates pode consumir muita memória. | Use `Document.Save` com `SaveOptions` que habilitam streaming (`PdfSaveOptions { Compress = true }`). | +| **Caracteres não‑latinos no prefixo** | Algumas fontes não suportam Unicode por padrão. | Defina `pdfWithBates.Font` para uma fonte compatível com Unicode, como `Arial Unicode MS`. | +| **Necessidade de posicionar números à esquerda** | Alinhamento está fixado em `Right`. | Altere `Alignment = HorizontalAlignment.Left` em `BatesNumberingOptions`. | + +--- + +## Etapa 6: Verificar o Resultado Manualmente (Opcional) + +Abra `BatesNumbered.pdf` em qualquer visualizador de PDF: + +1. Vire as páginas—cada uma deve exibir um rótulo como **INV‑01000** no canto inferior direito. +2. Use o **Painel de Assinatura** do Acrobat para clicar duas vezes na assinatura e confirmar se o status corresponde à saída do console. + +Se tudo estiver correto, você verificou com sucesso o status de **check pdf signature** e aplicou **add bates numbering** de uma só vez. + +--- + +## Perguntas Frequentes + +**Q: Posso verificar uma assinatura sem carregar todo o documento?** +A: Aspose.Pdf faz streaming do arquivo nos bastidores, mas ainda é necessário uma instância de `Document`. Para arquivos muito grandes, considere usar `PdfFileSignature` diretamente com um fluxo de arquivo para reduzir o consumo de memória. + +**Q: Preciso de uma licença para Aspose.Pdf?** +A: Uma avaliação gratuita funciona, mas adiciona uma marca d'água. Para produção, você precisará de uma licença adequada; caso contrário, os PDFs de saída terão o banner da Aspose. + +**Q: E se eu precisar adicionar números Bates apenas a um subconjunto de páginas?** +A: Use `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` onde o array lista os números das páginas que você deseja numerar. + +--- + +## Conclusão + +Agora você sabe **como verificar assinatura PDF** com Aspose.Pdf, entende o significado do resultado booleano e pode, com confiança, **adicionar numeração Bates** a qualquer PDF que controlar. O exemplo completo e executável combina ambas as tarefas, fornecendo uma única ferramenta de console que verifica a autenticidade de um documento e o carimba com identificadores prontos para auditoria. + +Em seguida, você pode explorar **como verificar assinatura** contra um repositório de raízes confiáveis, ou experimentar estilos personalizados de **add bates numbering**, como carimbos diagonais ou prefixos por seção. Ambos os tópicos se baseiam na fundação que você acabou de dominar e tornarão seu pipeline de processamento de documentos ainda mais robusto. + +Feliz codificação, e lembre‑se—verificar assinaturas e numerar páginas é muito fácil quando você tem o código correto! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/portuguese/net/printing-rendering/_index.md index 916a215be..27e63b5f5 100644 --- a/pdf/portuguese/net/printing-rendering/_index.md +++ b/pdf/portuguese/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Aprenda a imprimir com eficiência páginas específicas de um PDF usando o Aspo ### [Definir fator de zoom personalizado em PDFs usando Aspose.PDF para .NET - Um guia completo](./aspose-pdf-net-set-zoom-factor-pdfs/) Aprenda a definir um fator de zoom personalizado em documentos PDF usando o Aspose.PDF para .NET. Este guia aborda a instalação, as etapas de implementação e as aplicações práticas. +### [Como renderizar PDF em C# – Guia completo para PNG, HTML e marcação](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Aprenda a renderizar PDFs em C# usando Aspose.PDF, convertendo para PNG, gerando HTML e aplicando marcações. + ## Recursos adicionais - [Aspose.PDF para documentação da Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/portuguese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/portuguese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..85acc1a8a --- /dev/null +++ b/pdf/portuguese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-04-02 +description: Como renderizar PDF usando Aspose.PDF em C#. Aprenda a renderizar PDF + para PNG, salvar PDF como HTML e adicionar carimbos de texto de ajuste automático + de forma eficiente. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: pt +og_description: Como renderizar PDF usando Aspose.PDF em C#. Este guia mostra como + renderizar PDF para PNG, salvar como HTML e criar carimbos de texto de ajuste automático. +og_title: Como Renderizar PDF em C# – PNG, HTML e Carimbos Auto‑Ajustáveis +tags: +- Aspose.PDF +- C# +- PDF processing +title: Como Renderizar PDF em C# – Guia Completo para PNG, HTML e Marcação +url: /pt/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como Renderizar PDF em C# – Guia Completo para PNG, HTML e Carimbos + +Já se perguntou **como renderizar PDF** em uma aplicação .NET sem perder nenhum glifo? Talvez você tenha experimentado um rápido `PdfRenderer` apenas para ver caracteres ausentes, ou precise de um PNG nítido para uma miniatura, mas a saída parece serrilhada. Na minha experiência, a combinação correta de opções de renderização e tratamento de fontes faz a diferença entre uma pré‑visualização quebrada e uma imagem pixel‑perfeita. + +Neste tutorial, percorreremos três cenários do mundo real com Aspose.PDF for .NET: renderizar uma página PDF para PNG enquanto analisamos as fontes, adicionar um `TextStamp` que redimensiona automaticamente sua fonte e salvar um PDF como HTML usando a tabela CMap da fonte. Ao final, você será capaz de **renderizar PDF para PNG**, **converter página PDF em PNG**, **exportar imagem da página PDF** e até **salvar PDF como HTML** sem complicações. + +## Pré-requisitos + +- .NET 6.0 ou posterior (o código também funciona no .NET Framework 4.6+) +- Pacote NuGet Aspose.PDF for .NET (`Install-Package Aspose.PDF`) +- Um arquivo PDF com fontes complexas (por exemplo, `complexFonts.pdf`) para a demonstração de renderização +- Familiaridade básica com C# e Visual Studio (ou qualquer IDE de sua preferência) + +> **Dica profissional:** Se você estiver em um servidor CI, certifique‑se de que o arquivo de licença da Aspose esteja incorporado como recurso ou referenciado via variável de ambiente para evitar marcas d'água de avaliação. + +--- + +## ## Como Renderizar PDF para PNG com Análise de Fontes + +### Por que analisar fontes? + +Quando um PDF contém fontes personalizadas ou incorporadas, uma renderização ingênua pode omitir glifos que o renderizador não consegue mapear. Ativar `AnalyzeFonts` força a Aspose a inspecionar os fluxos de fontes e substituir glifos ausentes, garantindo uma imagem fiel. + +### Implementação passo a passo + +1. **Crie um `PngDevice` com `AnalyzeFonts` ativado.** +2. **Carregue o PDF de origem** usando `Document`. +3. **Processar a página desejada** e gravar o PNG no disco. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**O que você deve ver:** Um arquivo chamado `rendered.png` em `YOUR_DIRECTORY` que parece idêntico à primeira página de `complexFonts.pdf`, incluindo todos os caracteres especiais e diacríticos. + +![Página PDF renderizada como imagem PNG](rendered.png "Página PDF renderizada como imagem PNG") + +#### Armadilhas comuns e como evitá‑las + +- **Fontes ausentes no servidor:** Se o PDF referenciar fontes que não estejam incorporadas, coloque essas fontes no caminho de pesquisa da aplicação ou habilite `FontRepository` para apontar para uma pasta personalizada. +- **PDFs grandes:** Renderizar muitas páginas em um loop pode consumir memória; descarte cada instância de `Document` prontamente ou use blocos `using` como mostrado. + +--- + +## ## Adicionando um TextStamp de Ajuste Automático (Renderizar PDF com Texto Dinâmico) + +### Quando você precisaria de um carimbo de tamanho dinâmico? + +Imagine que você gera faturas e precisa sobrepor uma marca d'água “PAID” que se ajuste a qualquer retângulo que escolher, independentemente do comprimento do texto. Calcular manualmente o tamanho da fonte é propenso a erros; o `AutoAdjustFontSizeToFitStampRectangle` da Aspose faz o trabalho pesado. + +### Implementação passo a passo + +1. **Configure um `TextStamp`** com propriedades de ajuste automático. +2. **Carregue o PDF de destino** que você deseja carimbar. +3. **Adicione o carimbo a uma página** e salve o resultado. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Resultado:** `stampAutoFit.pdf` contém o texto “Important notice” perfeitamente dimensionado ao retângulo de 300 × 150 pt, independentemente do comprimento original da string. + +#### Casos extremos a considerar + +- **Strings muito longas:** Se o texto exceder o retângulo mesmo no menor tamanho de fonte, a Aspose truncará de acordo com o `WordWrapMode`. Você pode pré‑verificar o comprimento ou aumentar o tamanho do retângulo. +- **Múltiplos carimbos:** Reutilizar a mesma instância de `TextStamp` em páginas diferentes funciona, mas lembre‑se de que as propriedades de posição (`Left`, `Top`) mantêm seus últimos valores — redefina‑as conforme necessário. + +--- + +## ## Salvando PDF como HTML Usando a Tabela CMap da Fonte + +### Por que se preocupar com a tabela CMap? + +Ao converter um PDF para HTML, preservar o mapeamento Unicode é crucial para texto pesquisável. A estratégia baseada em CMap força a Aspose a priorizar o mapa de caracteres interno da fonte, o que frequentemente resulta em extração de texto mais precisa do que uma codificação genérica. + +### Implementação passo a passo + +1. **Crie `HtmlSaveOptions`** com a regra de codificação baseada em CMap. +2. **Carregue o PDF de origem**. +3. **Salve como HTML** usando as opções configuradas. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**O que você obterá:** Uma pasta (se `SplitIntoPages` for true) contendo `cmapHtml.html` e recursos associados. Abra o HTML em um navegador e você notará texto selecionável e pesquisável que corresponde ao PDF original quase perfeitamente. + +#### Dicas para uma exportação HTML limpa + +- **Imagens vs. vetores:** Defina `RasterImagesSavingMode` como `RasterImagesSavingMode.AsEmbeddedPartsOfPng` se preferir PNGs em vez de JPEGs para gráficos mais nítidos. +- **PDFs grandes:** Use `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` para manter cada página leve. + +--- + +## ## Exemplo Completo Funcional – Todos os Três Cenários em Um Projeto + +Abaixo está um aplicativo de console autônomo que demonstra as três técnicas lado a lado. Copie‑e‑cole em um novo projeto de console C#, adicione o pacote NuGet Aspose.PDF e ajuste os caminhos dos arquivos. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Execute o programa e você encontrará: + +- `rendered.png` – uma imagem perfeita da primeira página do PDF. +- `stampAutoFit.pdf` – o PDF original com um carimbo “Important notice” de tamanho dinâmico. +- `cmapHtml.html` (mais arquivos HTML específicos de página) – uma versão HTML que preserva a codificação de texto original. + +--- + +## ## Perguntas Frequentes (FAQ) + +**Q: O `AnalyzeFonts` aumenta o tempo de renderização?** +A: Um pouco, porque a Aspose escaneia cada fluxo de fonte. O trade‑off geralmente vale a pena para PDFs complexos onde glifos ausentes são inaceitáveis. + +**Q: Posso renderizar várias páginas em um loop?** +A: Absolutamente. Basta iterar sobre `sourcePdf.Pages` e chamar `pngDevice.Process(page, $"page{page.Number}.png")`. Lembre‑se de descartar cada `Document` se você os abrir separadamente. + +**Q: E se + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 cef572e3c..09001ed73 100644 --- a/pdf/russian/net/conversion-export/_index.md +++ b/pdf/russian/net/conversion-export/_index.md @@ -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 и проверка подписи PDF – Полное руководство Aspose .NET](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Узнайте, как конвертировать PDF в HTML и проверять цифровую подпись PDF с помощью Aspose.PDF для .NET, используя пошаговые примеры кода. + ### [Конвертируйте PDF в PNG с помощью Aspose.PDF .NET: улучшенная подсказка шрифтов для четкой визуализации текста](./convert-pdf-png-aspose-net-font-hinting/) Узнайте, как преобразовывать PDF-документы в высококачественные изображения PNG с помощью Aspose.PDF .NET, обеспечивая четкую визуализацию текста с помощью подсказок шрифтов. @@ -141,7 +144,7 @@ Узнайте, как эффективно экспортировать данные из приложений в PDF с помощью Aspose.PDF для .NET. В этом руководстве рассматриваются настройка, примеры кода на C# и основные функции. ### [Экспорт аннотаций PDF с помощью Aspose.PDF .NET: подробное руководство](./export-annotations-aspose-pdf-net/) -Узнайте, как эффективно экспортировать аннотации из PDF-файлов с помощью Aspose.PDF для .NET. Это руководство охватывает настройку, реализацию и лучшие практики. +Узнайте, как эффективно экспортировать аннотации из PDF-файлов с помощью Aspose.PDF .NET. Это руководство охватывает настройку, реализацию и лучшие практики. ### [Экспорт данных PDF в XML с помощью Aspose.PDF для .NET: пошаговое руководство](./export-pdf-data-to-xml-aspose-dotnet-guide/) Узнайте, как эффективно экспортировать данные PDF-форм в структурированный XML с помощью Aspose.PDF для .NET — мощной библиотеки, предназначенной для работы с PDF-файлами. diff --git a/pdf/russian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/russian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..4985f59f1 --- /dev/null +++ b/pdf/russian/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,259 @@ +--- +category: general +date: 2026-04-02 +description: Преобразовать PDF в HTML, сохранив векторы, затем проверить подпись PDF + с помощью Aspose PDF. Изучить конвертацию PDF в Aspose и проверку цифровой подписи + PDF на C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: ru +og_description: Конвертировать PDF в HTML с сохранением векторов и проверять подпись + PDF с помощью Aspose PDF. Пошаговый код на C#, советы и обработка крайних случаев. +og_title: Преобразовать PDF в HTML и проверить подпись PDF – Полный учебник Aspose + .NET +tags: +- Aspose.PDF +- C# +- PDF processing +title: Конвертирование PDF в HTML и проверка подписи PDF – полное руководство Aspose .NET +url: /ru/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Преобразование PDF в HTML и проверка подписи PDF – Полный учебник Aspose .NET + +Когда‑то вам нужно было **преобразовать PDF в HTML**, но вы боялись потерять векторное качество или нарушить цифровую подпись? Вы не одиноки. Многие разработчики сталкиваются с проблемой, когда PDF содержит только векторную графику или цифровую подпись на основе SHA‑3 — стандартные конвертеры либо растрируют всё, либо полностью игнорируют подпись. + +В этом руководстве мы пройдем практическое решение с использованием **Aspose.Pdf** для .NET: сначала уберём растровые изображения, превратив PDF, содержащий только векторы, в чистый HTML, затем покажем, как **проверить подпись PDF** (да, SHA‑3‑256) и вывести результат в консоль. К концу вы получите готовую к запуску программу на C#, выполняющую обе задачи, а также несколько советов, как избежать типичных подводных камней. + +## Что вам понадобится + +- **Aspose.Pdf for .NET** (последняя версия на момент 2026‑04, например, 23.12). +- Среда разработки .NET (Visual Studio 2022 или VS Code с расширением C#). +- Два примерных PDF‑файла: + 1. `vectorOnly.pdf` — содержит только векторы и текст, без растровых изображений. + 2. `signed_sha3.pdf` — цифровая подпись с хешем SHA‑3‑256. + +Никаких дополнительных пакетов NuGet, кроме `Aspose.Pdf`, не требуется. + +--- + +## Шаг 1: Создание проекта и загрузка PDF‑файлов + +Создайте новое консольное приложение, добавьте NuGet‑пакет Aspose.Pdf и подключите необходимые пространства имён. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Почему это важно*: Загрузка документов заранее позволяет переиспользовать объекты как для конвертации, так и для проверки подписи, экономя память. + +--- + +## Шаг 2: Преобразование PDF в HTML с пропуском растровых изображений + +`HtmlSaveOptions` в Aspose.Pdf предоставляет тонкую настройку обработки изображений. Установка `RasterImagesSavingMode` в `Skip` заставит библиотеку полностью игнорировать растровые картинки — идеальный вариант для PDF, содержащего только векторы. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Ожидаемый вывод**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Совет*: Если позже понадобится встроить HTML в веб‑страницу, сгенерированный файл будет содержать только SVG и CSS — без тяжёлых PNG/JPEG‑блобов. + +--- + +## Шаг 3: Подготовка обработчика подписи + +Класс `PdfFileSignature` в Aspose.Pdf — точка входа для любой работы с цифровыми подписями. Он читает словарь подписи, извлекает имя и позволяет проверять её с использованием конкретного алгоритма хеширования. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Почему этот шаг критичен*: Без обработчика невозможно перечислить подписи или выбрать нужный алгоритм хеширования (например, SHA‑3‑256). + +--- + +## Шаг 4: Перебор и проверка каждой подписи с использованием SHA‑3‑256 + +Метод `GetSignNames()` возвращает все метки подписи в PDF. Пройдитесь по ним в цикле, вызовите `VerifySignature` с `DigestHashAlgorithm.Sha3_256` и выведите результат. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Пример вывода в консоль**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Особый случай*: Если подпись использует другой хеш (например, SHA‑256), проверка вернёт `False`. Можно добавить резервную проверку, попробовав другие значения `DigestHashAlgorithm` внутри цикла. + +--- + +## Шаг 5: Полный рабочий пример (весь код в одном месте) + +Ниже полная программа, которую можно скопировать в `Program.cs`. Замените `YOUR_DIRECTORY` на реальный путь к папке с вашими PDF‑файлами. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Запустите программу (`dotnet run` или нажмите **F5** в Visual Studio). Вы увидите подтверждение конвертации, а затем результаты проверки подписи. + +--- + +## Часто задаваемые вопросы и решения + +| Вопрос | Ответ | +|----------|--------| +| **Содержит ли HTML оригинальные шрифты?** | Aspose.Pdf по умолчанию встраивает используемые шрифты как base‑64 data URI, поэтому вывод отображается корректно даже на машине без этих шрифтов. | +| **Что делать, если PDF содержит и векторы, и изображения?** | Оставьте `RasterImagesSavingMode = Skip`, чтобы убрать изображения, или переключите на `EmbedAll`, если они нужны. Параметр задаётся для каждой конвертации, так что можно выполнить два прохода для получения обеих версий. | +| **Моя подпись использует SHA‑512 — как её проверить?** | Замените `DigestHashAlgorithm.Sha3_256` на `DigestHashAlgorithm.Sha512`. При желании можно определить алгоритм из словаря подписи и выбирать его динамически. | +| **Можно ли получить детали сертификата подписанта?** | Да. После проверки вызовите `signatureHandler.GetSignatureInfo(signName).Certificate`, чтобы получить X.509‑сертификат и изучить поля `Subject` и `Issuer`. | +| **Что если PDF защищён паролем?** | Загружайте его так: `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. Остальная часть процесса остаётся неизменной. | + +--- + +## Профессиональные рекомендации для продакшн‑кода + +1. **Корректно освобождайте PDF‑документы** — оборачивайте экземпляры `PdfDocument` в `using` или вызывайте `Dispose()`, чтобы освободить нативные ресурсы. +2. **Пакетная обработка** — если у вас десятки PDF, перебирайте файлы в каталоге, сохраняйте результаты в CSV и параллелизуйте конвертацию с помощью `Parallel.ForEach`. +3. **Логирование** — замените `Console.WriteLine` на структурированный логгер (Serilog, NLog) для лучшей трассируемости, особенно при проверке множества подписей. +4. **Обработка ошибок** — отлавливайте `Aspose.Pdf.Exceptions`, чтобы gracefully обрабатывать повреждённые файлы: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Совместимость версий** — Aspose.Pdf быстро развивается. Всегда тестируйте с точной версией, указанной в вашем `csproj`. Приведённый API работает для 23.x и новее. + +--- + +## Заключение + +Мы только что **преобразовали PDF в HTML**, сохранив лишь векторы и текст, и **проверили подпись PDF** с помощью алгоритма SHA‑3‑256 — всё это в паре строк кода на C#. Ключевые выводы: + +- Используйте `HtmlSaveOptions.RasterImagesSavingMode = Skip` для чистого HTML только с векторной графикой. +- Применяйте `PdfFileSignature` и `DigestHashAlgorithm.Sha3_256` для надёжной **проверки цифровой подписи PDF**. + +Дальше вы можете изучать связанные темы, такие как **aspose pdf conversion** PDF в PNG, извлечение вложенных файлов или создание веб‑сервиса, принимающего PDF и возвращающего проверенные HTML‑фрагменты. + +Попробуйте, поиграйте с параметрами и делитесь результатами. Приятного кодинга! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 4550fdd12..e7965a59f 100644 --- a/pdf/russian/net/digital-signatures/_index.md +++ b/pdf/russian/net/digital-signatures/_index.md @@ -33,7 +33,7 @@ ### [Как удалить цифровые подписи PDF с помощью Aspose.PDF .NET | Полное руководство](./remove-pdf-digital-signatures-aspose-pdf-net/) -### [Как проверить подписи PDF с помощью Aspose.PDF для .NET: подробное руководство](./verify-pdf-signatures-aspose-pdf-net/) +### [Как проверить подписи PDF с помощью Aspose.PDF для .NET: подробное руководство](./verify-pdf-signatures-aspose-net/) ### [Проверка подписи PDF в C# – пошаговое руководство](./verify-pdf-signature-in-c-step-by-step-guide/) Узнайте, как проверять цифровые подписи PDF-файлов в C# с помощью Aspose.PDF, следуя пошаговым инструкциям. @@ -53,6 +53,12 @@ ### [Проверка подписи PDF с Aspose – конвертация PDF в HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Узнайте, как проверить подпись PDF и преобразовать документ в HTML с помощью Aspose.PDF для .NET. +### [Проверка подписи PDF и добавление нумерации Бейтса – Полное руководство на C#](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Узнайте, как проверять подписи PDF и добавлять нумерацию Бейтса в C# с помощью Aspose.PDF, следуя пошаговым инструкциям. + +### [Как извлечь подписи из PDF – руководство Aspose C#](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Узнайте, как извлекать подписи из PDF‑документов с помощью Aspose.PDF и C# в простом пошаговом руководстве. + ## Дополнительные ресурсы - [Документация Aspose.PDF для сети](https://docs.aspose.com/pdf/net/) diff --git a/pdf/russian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/russian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..e47373177 --- /dev/null +++ b/pdf/russian/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-02 +description: Узнайте, как извлекать подписи, добавлять поле, добавлять пустую страницу + в PDF, как добавлять виджет и сохранять прозрачность PDF с помощью Aspose.Pdf на + C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: ru +og_description: Как извлечь подписи из PDF и выполнить связанные задачи, такие как + добавление полей, пустых страниц, виджетов и сохранение прозрачности с помощью Aspose.Pdf. +og_title: Как извлечь подписи из PDF – руководство Aspose C# +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Как извлечь подписи из PDF – руководство Aspose C# +url: /ru/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как извлечь подписи из PDF – Руководство Aspose C# + +**Как извлечь подписи из PDF** – это распространённая задача при автоматизации обработки контрактов, согласования счетов или любого рабочего процесса, зависящего от цифровых подписей. +В этом руководстве мы также рассмотрим **how to add field**, **add blank page PDF**, **how to add widget** и **preserve transparency PDF**, используя библиотеку Aspose.Pdf для .NET. + +Представьте, что каждую ночь вы получаете десятки подписанных PDF‑файлов; открывать каждый файл вручную для проверки подписей было бы кошмаром. С помощью нескольких строк кода на C# вы можете программно получить имена подписей, сохранить оригинальную графику нетронутой и даже обогатить документ новыми полями формы — всё без нарушения существующей прозрачности или цветовых профилей. + +> **Что вы получите:** полностью готовый, исполняемый пример, который конвертирует PDF в PDF/X‑4 (сохраняя прозрачность), извлекает все встроенные имена подписей, добавляет пустую страницу и создаёт текстовое поле формы, отображающееся в двух местах на одной странице. + +## Предварительные требования + +- .NET 6.0 или новее (код также работает с .NET Framework) +- Aspose.Pdf for .NET **v25.2** или новее (необходимо для `GetSignatureNames()`) +- Проект Visual Studio или любой другой IDE для C# +- Три образца PDF в папке, которой вы управляете: + - `source.pdf` – любой PDF, который вы хотите конвертировать, сохраняя прозрачность + - `signed.pdf` – PDF, уже содержащий цифровые подписи + - (необязательно) пустая папка для файлов вывода + +> **Pro tip:** Если у вас ещё нет лицензированной копии, вы можете запросить бесплатную временную лицензию на сайте Aspose. Бесплатный режим подходит для тестирования, но добавляет водяной знак. + +## Шаг 1 – Сохранить прозрачность PDF, конвертируя в PDF/X‑4 + +Прозрачность и встроенные цветовые профили часто теряются при «уплощении» PDF. Конвертация в **PDF/X‑4** сохраняет эти визуальные элементы, что критично для документов, готовых к печати. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Почему это важно:** +PDF/X‑4 — это ISO‑стандарт для графических PDF, сохраняющих живую прозрачность. Используя `PdfFormatConversionOptions`, вы избегаете распространённой ошибки растеризации прозрачных объектов, что может резко увеличить размер файла и ухудшить качество. + +## Шаг 2 – Как извлечь подписи из PDF + +Aspose внедрила `GetSignatureNames()` в версии 25.2, делая извлечение подписей однострочным вызовом. Метод возвращает массив логических имён, присвоенных каждому полю цифровой подписи. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**Что ожидать:** Если `signed.pdf` содержит две подписи с именами *ManagerSig* и *ClientSig*, консоль выведет: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Обработка граничных случаев:** +- Если в PDF нет подписей, `GetSignatureNames()` возвращает пустой массив — исключение не генерируется. +- Для PDF с повреждёнными полями подписи вы можете обернуть вызов в `try/catch` и записать ошибку, не прерывая весь процесс. + +## Шаг 3 – Добавить пустую страницу PDF и создать TextBox с несколькими виджетами + +Добавление новой страницы простое, но **how to add field** и **how to add widget** вместе требуют небольшого уточнения. *Виджет* — это визуальное представление поля формы; к одному логическому полю можно привязать несколько виджетов, позволяя одинаковым данным отображаться в разных местах. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Зачем использовать несколько виджетов?** +Предположим, вам нужно, чтобы один и тот же комментарий отображался и на лицевой, и на обратной стороне контракта. Привязав два виджета к одному полю, любое изменение, сделанное пользователем в одном месте, автоматически обновит другое. + +**Распространённые подводные камни:** +- Если забыть добавить поле в `newDoc.Form`, виджет будет невидим в PDF‑просмотрщиках. +- Использование одинаковых координат прямоугольника для обоих виджетов наложит их друг на друга — убедитесь, что значения `Rectangle` различаются. + +## Шаг 4 – Собираем всё вместе: полный, исполняемый пример + +Ниже представлен единый программный файл, который последовательно выполняет каждый из описанных шагов. Скопируйте его в новый консольный проект, скорректируйте пути и запустите. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Ожидаемый вывод + +При запуске программы вы должны увидеть что‑то вроде: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Откройте `TextBoxMultipleWidgets.pdf` в Adobe Acrobat Reader; вы заметите два одинаковых текстовых поля с меткой **Comments** — одно в верхней части, другое чуть ниже. Ввод текста в одно поле мгновенно обновит другое. + +## Часто задаваемые вопросы (FAQ) + +| Вопрос | Ответ | +|----------|--------| +| **Можно ли извлечь фактические байты подписи?** | `GetSignatureNames()` возвращает только логические имена. Чтобы получить сертификат или значение подписи, нужно работать с объектами `SignatureField` (`document.Form["fieldName"] as SignatureField`). | +| **Работает ли конвертация в PDF/X‑4 с зашифрованными PDF?** | Да, при условии, что вы передаёте пароль через `Document.Open(file, password)`. | +| **Что делать, если нужно более двух виджетов?** | Просто вызывайте `textBox.Widgets.Add()` для каждого дополнительного `WidgetAnnotation`. | +| **Наследует ли пустая страница размер оригинального PDF?** | Новая страница использует размер по умолчанию (A4). При необходимости можно передать объект `Page` с пользовательскими размерами. | +| **Совместим ли код с .NET Core?** | Абсолютно — Aspose.Pdf кросс‑платформенный. Достаточно добавить NuGet‑пакет в ваш проект .NET Core. | + +## Заключение + +В этом руководстве мы продемонстрировали **how to extract signatures from PDF** и одновременно рассмотрели **how to add field**, **add blank page PDF**, **how to add widget** и **preserve transparency PDF**, используя Aspose.Pdf для C#. Теперь у вас есть надёжное сквозное решение, которое можно внедрить в любой конвейер обработки документов. + +Готовы к следующему вызову? Попробуйте комбинировать эти техники с модулем OCR от Aspose, чтобы читать текст со сканированных + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/russian/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..ccbb3209d --- /dev/null +++ b/pdf/russian/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,225 @@ +--- +category: general +date: 2026-04-02 +description: Быстро проверяйте подпись PDF и узнайте, как добавить нумерацию Бейтса + с помощью Aspose.Pdf. Включает пошаговый код и советы. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: ru +og_description: Быстро проверьте подпись PDF и узнайте, как добавить нумерацию Бейтса + с помощью Aspose.Pdf. Следуйте полному примеру и избегайте распространённых ошибок. +og_title: Проверка подписи PDF и добавление нумерации Бейтса — Полное руководство + по C# +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: Проверка подписи PDF и добавление нумерации Бейтса — полное руководство по + C# +url: /ru/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Проверка подписи PDF и добавление нумерации Бейтса – Полное руководство на C# + +Когда‑нибудь вам нужно было **verify PDF signature** перед отправкой контракта, но вы не знали, какой вызов API использовать? Вы не одиноки — многие разработчики сталкиваются с этим при работе с юридически обязательными PDF. В этом руководстве мы подробно покажем, как **verify PDF signature** с помощью Aspose.Pdf, а затем продемонстрируем, **how to add bates numbering**, чтобы ваши файлы были готовы к аудиту. + +Мы также коснёмся **how to verify signature** программно, рассмотрим **how to add bates** за один проход и объясним результаты **check pdf signature**, чтобы вы могли доверять выводу. К концу вы получите готовое к запуску консольное приложение C#, которое выполняет обе задачи — без загадок, только понятный код. + +--- + +## Что понадобится + +- **.NET 6.0** или новее (пример также работает с .NET Framework 4.7+) +- **Aspose.Pdf for .NET** пакет NuGet (версия 23.11 или новее) +- Подписанный PDF‑файл (`signed.pdf`), который нужно проверить +- Обычный PDF (`input.pdf`), в который будет добавлена нумерация Бейтса + +Если у вас есть всё перечисленное, можно начинать. Никаких дополнительных SDK, никаких скрытых файлов конфигурации. + +--- + +## Шаг 1: Настройка проекта + +Начните с создания консольного проекта: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Откройте `Program.cs` и удалите код по умолчанию. Мы построим всё с нуля, чтобы вы могли позже скопировать‑вставить готовую версию. + +--- + +## Шаг 2: Проверка подписи PDF + +### Почему проверка важна + +Цифровая подпись может быть **compromised**, если базовый сертификат отозван или документ был изменён после подписания. Aspose.Pdf предоставляет удобный метод `IsSignatureCompromised`, который возвращает логическое значение — просто, но достаточно мощно для большинства аудиторских конвейеров. + +### Фрагмент кода + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Explanation** + +- `Document` загружает PDF в память. +- `PdfFileSignature` оборачивает документ и предоставляет методы, связанные с подписью. +- `IsSignatureCompromised("Signature1")` проверяет целостность подписи с именем *Signature1*. +- Логический результат сообщает, доверять ли подписи. + +> **Pro tip:** Если вы не уверены в имени поля подписи, сначала вызовите `pdfSignature.GetSignatureNames()`; он возвращает список всех идентификаторов подписи. + +--- + +## Шаг 3: Подготовка параметров нумерации Бейтса + +### Что такое нумерация Бейтса? + +Номера Бейтса — это последовательные идентификаторы, печатаемые на каждой странице юридического или судебно‑медицинского документа. Они упрощают ссылку на страницы во время раскрытия информации или аудита. `BatesNumberingOptions` из Aspose.Pdf позволяет настроить префикс, начальный номер, количество цифр, выравнивание и отступ — всё в одном объекте. + +### Продолжение кода + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Explanation** + +- `BatesNumberingOptions` централизует все параметры форматирования. +- `AddBatesNumbering` автоматически проходит по каждой странице — нет необходимости в ручном цикле. +- `Prefix` (`INV-`) и `StartNumber` (1000) создают метки вроде `INV-01000`, `INV-01001` и т.д. +- При необходимости измените `BottomMargin`, чтобы разместить номер выше или ниже на странице. + +--- + +## Шаг 4: Запуск полного примера + +Сохраните файл, затем выполните: + +```bash +dotnet run +``` + +Вы должны увидеть две строки в консоли: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Если первая строка выводит `True`, подпись compromised — значит документ мог быть изменён после подписания или сертификат более недействителен. В этом случае следует прервать дальнейшую обработку. + +--- + +## Шаг 5: Распространённые граничные случаи и способы их обработки + +| Ситуация | На что обратить внимание | Рекомендуемое решение | +|-----------|-------------------|---------------| +| **Multiple signatures** | `IsSignatureCompromised` проверяет только одно поле за раз. | Пройдите в цикле `pdfSignature.GetSignatureNames()` и проверьте каждую. | +| **Custom signature field name** | Использование `"Signature1"` может вызвать исключение, если имя отличается. | Сначала получите список имён, или передайте точное имя, которое видите в Acrobat. | +| **Large PDFs (100+ pages)** | Добавление нумерации Бейтса может потреблять много памяти. | Используйте `Document.Save` с `SaveOptions`, включающими потоковую запись (`PdfSaveOptions { Compress = true }`). | +| **Non‑Latin characters in prefix** | Некоторые шрифты по умолчанию не поддерживают Unicode. | Установите `pdfWithBates.Font` в шрифт, поддерживающий Unicode, например `Arial Unicode MS`. | +| **Need to place numbers on the left** | Выравнивание жёстко задано как `Right`. | Измените `Alignment = HorizontalAlignment.Left` в `BatesNumberingOptions`. | + +--- + +## Шаг 6: Ручная проверка результата (по желанию) + +Откройте `BatesNumbered.pdf` в любом PDF‑просмотрщике: + +1. Перелистывайте страницы — каждая должна показывать метку вроде **INV‑01000** в правом нижнем углу. +2. Воспользуйтесь **Signature Panel** в Acrobat, дважды щёлкните подпись и убедитесь, что статус соответствует выводу консоли. + +Если всё совпадает, вы успешно проверили статус **check pdf signature** и применили **add bates numbering** за один проход. + +--- + +## Часто задаваемые вопросы + +**Q: Можно ли проверить подпись без загрузки всего документа?** +A: Aspose.Pdf потоково читает файл, но всё равно требуется экземпляр `Document`. Для очень больших файлов рассмотрите возможность использовать `PdfFileSignature` напрямую с файловым потоком, чтобы уменьшить потребление памяти. + +**Q: Нужна ли лицензия для Aspose.Pdf?** +A: Бесплатная оценочная версия работает, но добавляет водяной знак. Для продакшна потребуется полноценная лицензия; иначе в результирующих PDF будет отображаться баннер Aspose. + +**Q: Что делать, если нужно добавить нумерацию Бейтса только на часть страниц?** +A: Используйте `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })`, где массив перечисляет номера страниц, которые нужно пронумеровать. + +--- + +## Заключение + +Теперь вы знаете **how to verify PDF signature** с помощью Aspose.Pdf, понимаете смысл логического результата и уверенно можете **add bates numbering** в любой PDF, которым управляете. Полный, готовый к запуску пример объединяет обе задачи, предоставляя единственный консольный инструмент, проверяющий подлинность документа и помечающий его идентификаторами, готовыми к аудиту. + +Далее вы можете изучить **how to verify signature** относительно доверенного хранилища корневых сертификатов или поэкспериментировать с пользовательскими стилями **add bates numbering**, например диагональными штампами или префиксами для каждой секции. Оба направления опираются на полученные знания и сделают ваш конвейер обработки документов ещё более надёжным. + +Удачной разработки, и помните — проверка подписей и нумерация страниц становятся простыми, как пирожное, когда у вас есть правильный код! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/russian/net/printing-rendering/_index.md index 38a54a4ab..fefe0b02f 100644 --- a/pdf/russian/net/printing-rendering/_index.md +++ b/pdf/russian/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ ### [Установка пользовательского коэффициента масштабирования в PDF-файлах с помощью Aspose.PDF для .NET — полное руководство](./aspose-pdf-net-set-zoom-factor-pdfs/) Узнайте, как задать собственный коэффициент масштабирования в документах PDF с помощью Aspose.PDF для .NET. Это руководство охватывает установку, шаги внедрения и практические приложения. +### [Как отрисовать PDF в C# – Полное руководство по PNG, HTML и штампованию](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Узнайте, как с помощью Aspose.PDF отобразить PDF в C#, преобразовать его в PNG и HTML, а также добавить штампы к документу. + ## Дополнительные ресурсы - [Документация Aspose.PDF для сети](https://docs.aspose.com/pdf/net/) diff --git a/pdf/russian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/russian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..c324dee18 --- /dev/null +++ b/pdf/russian/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-04-02 +description: Как рендерить PDF с помощью Aspose.PDF в C#. Узнайте, как преобразовать + PDF в PNG, сохранить PDF в формате HTML и эффективно добавить авто‑подгоняющие текстовые + штампы. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: ru +og_description: Как рендерить PDF с помощью Aspose.PDF в C#. Это руководство показывает + рендеринг PDF в PNG, сохранение в HTML и создание авто‑подгоняющихся текстовых штампов. +og_title: Как рендерить PDF в C# – PNG, HTML и авто‑подгонка штампов +tags: +- Aspose.PDF +- C# +- PDF processing +title: Как рендерить PDF в C# – Полное руководство по PNG, HTML и штампованию +url: /ru/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как отрисовать PDF в C# – Полное руководство по PNG, HTML и штампам + +Когда‑нибудь задумывались **как отрисовать PDF** в приложении .NET без потери ни одного глифа? Возможно, вы пробовали быстрый `PdfRenderer` и увидели недостающие символы, или вам нужен чёткий PNG для миниатюры, но результат выглядит «зубчатым». По моему опыту правильное сочетание параметров рендеринга и обработки шрифтов делает разницу между сломанным превью и пиксельно‑идеальным изображением. + +В этом руководстве мы рассмотрим три реальных сценария с Aspose.PDF for .NET: рендеринг страницы PDF в PNG с анализом шрифтов, добавление `TextStamp`, автоматически подбирающего размер шрифта, и сохранение PDF как HTML с использованием таблицы CMap шрифта. К концу вы сможете **render PDF to PNG**, **convert PDF page PNG**, **export PDF page image**, а также **save PDF as HTML** без проблем. + +## Prerequisites + +- .NET 6.0 или новее (код также работает на .NET Framework 4.6+) +- NuGet‑пакет Aspose.PDF for .NET (`Install-Package Aspose.PDF`) +- PDF‑файл со сложными шрифтами (например, `complexFonts.pdf`) для демонстрации рендеринга +- Базовые знания C# и Visual Studio (или любой другой IDE, который вы предпочитаете) + +> **Pro tip:** Если вы работаете на CI‑сервере, убедитесь, что файл лицензии Aspose либо встроен как ресурс, либо указан через переменную окружения, чтобы избежать водяных знаков оценки. + +--- + +## ## How to Render PDF to PNG with Font Analysis + +### Why analyze fonts? + +Когда PDF содержит пользовательские или встроенные шрифты, наивный рендер может пропустить глифы, которые рендерер не может сопоставить. Включение `AnalyzeFonts` заставляет Aspose исследовать потоки шрифтов и подставлять недостающие глифы, гарантируя точное изображение. + +### Step‑by‑step implementation + +1. **Create a `PngDevice` with `AnalyzeFonts` turned on.** +2. **Load the source PDF** using `Document`. +3. **Process the desired page** and write the PNG to disk. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**What you should see:** Файл `rendered.png` в папке `YOUR_DIRECTORY`, который выглядит точно так же, как первая страница `complexFonts.pdf`, включая все специальные символы и диакритические знаки. + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### Common pitfalls & how to avoid them + +- **Missing fonts on the server:** Если PDF ссылается на шрифты, не встроенные в файл, разместите эти шрифты в пути поиска приложения или включите `FontRepository`, указывающий на пользовательскую папку. +- **Large PDFs:** Рендеринг множества страниц в цикле может потреблять много памяти; своевременно освобождайте каждый объект `Document` или используйте блоки `using`, как показано. + +--- + +## ## Adding an Auto‑Fit TextStamp (Render PDF with Dynamic Text) + +### When would you need a dynamically sized stamp? + +Представьте, что вы генерируете счета‑фактуры и хотите наложить водяной знак «PAID», который помещается в любой выбранный прямоугольник, независимо от длины текста. Ручной расчёт размера шрифта склонен к ошибкам; `AutoAdjustFontSizeToFitStampRectangle` в Aspose делает всю тяжёлую работу. + +### Step‑by‑step implementation + +1. **Configure a `TextStamp`** with auto‑adjust properties. +2. **Load the target PDF** you want to stamp. +3. **Add the stamp to a page** and save the result. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Result:** `stampAutoFit.pdf` содержит текст «Important notice», идеально вписанный в прямоугольник 300 × 150 pt, независимо от исходной длины строки. + +#### Edge cases to consider + +- **Very long strings:** Если текст превышает размеры прямоугольника даже при минимальном размере шрифта, Aspose обрежет его согласно `WordWrapMode`. Вы можете предварительно проверить длину или увеличить размер прямоугольника. +- **Multiple stamps:** Переиспользование одного экземпляра `TextStamp` на разных страницах работает, но помните, что свойства позиции (`Left`, `Top`) сохраняют свои последние значения — сбрасывайте их при необходимости. + +--- + +## ## Saving PDF as HTML Using the Font’s CMap Table + +### Why bother with the CMap table? + +При конвертации PDF в HTML сохранение сопоставления Unicode критично для поискового текста. Стратегия, основанная на CMap, заставляет Aspose отдавать приоритет внутренней карте символов шрифта, что часто даёт более точное извлечение текста, чем общее кодирование. + +### Step‑by‑step implementation + +1. **Create `HtmlSaveOptions`** with the CMap‑based encoding rule. +2. **Load the source PDF**. +3. **Save as HTML** using the configured options. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**What you’ll get:** Папка (если `SplitIntoPages` = true) с файлом `cmapHtml.html` и сопутствующими ресурсами. Откройте HTML в браузере — вы увидите выделяемый, поисковый текст, почти полностью совпадающий с оригиналом PDF. + +#### Tips for a clean HTML export + +- **Images vs. vectors:** Установите `RasterImagesSavingMode` в `RasterImagesSavingMode.AsEmbeddedPartsOfPng`, если предпочитаете PNG вместо JPEG для более чёткой графики. +- **Large PDFs:** Используйте `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages`, чтобы каждая страница оставалась лёгкой. + +--- + +## ## Full Working Example – All Three Scenarios in One Project + +Ниже приведено автономное консольное приложение, демонстрирующее все три техники одновременно. Скопируйте‑вставьте его в новый C#‑проект консоли, добавьте NuGet‑пакет Aspose.PDF и скорректируйте пути к файлам. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Запустите программу, и вы получите: + +- `rendered.png` — идеальное изображение первой страницы PDF. +- `stampAutoFit.pdf` — оригинальный PDF с динамически масштабируемым штампом «Important notice». +- `cmapHtml.html` (плюс файлы HTML для каждой страницы) — HTML‑версия, сохраняющая оригинальное кодирование текста. + +--- + +## ## Frequently Asked Questions (FAQ) + +**Q: Does `AnalyzeFonts` increase rendering time?** +A: Slightly, because Aspose scans each font stream. The trade‑off is usually worth it for complex PDFs where missing glyphs are unacceptable. + +**Q: Can I render multiple pages in a loop?** +A: Absolutely. Just iterate over `sourcePdf.Pages` and call `pngDevice.Process(page, $"page{page.Number}.png")`. Remember to dispose of each `Document` if you open them separately. + +**Q: What if + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 d83ea04f0..31d725601 100644 --- a/pdf/spanish/net/conversion-export/_index.md +++ b/pdf/spanish/net/conversion-export/_index.md @@ -65,6 +65,9 @@ Un tutorial de código para Aspose.PDF Net ### [Convertir PDF a HTML con Aspose.PDF para .NET: Guía de salida de secuencias](./convert-pdf-html-aspose-dotnet-guide/) Aprenda a convertir archivos PDF a HTML con Aspose.PDF para .NET mediante la salida de flujo. Mejore su integración y accesibilidad web. +### [Convertir PDF a HTML y Verificar la Firma PDF – Guía completa de Aspose .NET](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Aprenda a convertir PDFs a HTML y validar firmas digitales usando Aspose.PDF para .NET en una guía paso a paso. + ### [Convertir PDF a HTML en .NET usando Aspose.PDF sin guardar imágenes](./convert-pdf-html-net-asposepdf-no-images/) Aprenda a convertir archivos PDF a HTML con Aspose.PDF para .NET sin guardar las imágenes por separado. Mantenga la integridad del diseño con nuestra guía detallada. @@ -141,7 +144,7 @@ Aprenda a recortar regiones específicas de una página PDF y convertirlas en im Aprenda a exportar datos de aplicaciones a PDF de forma eficiente con Aspose.PDF para .NET. Esta guía abarca la configuración, ejemplos de código en C# y las características principales. ### [Exportar anotaciones PDF con Aspose.PDF .NET: una guía completa](./export-annotations-aspose-pdf-net/) -Aprenda a exportar anotaciones desde archivos PDF de forma eficiente con Aspose.PDF para .NET. Esta guía abarca la configuración, la implementación y las prácticas recomendadas. +Aprenda a exportar anotaciones desde archivos PDF de forma eficiente con Aspose.PDF .NET. Esta guía abarca la configuración, la implementación y las prácticas recomendadas. ### [Exportar datos PDF a XML con Aspose.PDF para .NET: guía paso a paso](./export-pdf-data-to-xml-aspose-dotnet-guide/) Aprenda a exportar de manera eficiente datos de formularios PDF a XML estructurado utilizando Aspose.PDF para .NET, una poderosa biblioteca diseñada para la manipulación de PDF. diff --git a/pdf/spanish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/spanish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..2e432eed1 --- /dev/null +++ b/pdf/spanish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,260 @@ +--- +category: general +date: 2026-04-02 +description: Convertir PDF a HTML manteniendo los vectores, luego verificar la firma + del PDF usando Aspose PDF. Aprender la conversión de Aspose PDF y comprobar la firma + digital del PDF en C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: es +og_description: Convierte PDF a HTML preservando los vectores y verifica la firma + del PDF con Aspose PDF. Código C# paso a paso, consejos y manejo de casos límite. +og_title: Convertir PDF a HTML y verificar la firma del PDF – Tutorial completo de + Aspose .NET +tags: +- Aspose.PDF +- C# +- PDF processing +title: Convertir PDF a HTML y Verificar la Firma del PDF – Guía Completa de Aspose + .NET +url: /es/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Convertir PDF a HTML y Verificar la Firma PDF – Tutorial Completo de Aspose .NET + +¿Alguna vez necesitaste **convertir PDF a HTML** pero te preocupaba perder la calidad vectorial o romper las firmas digitales? No eres el único. Muchos desarrolladores se topan con un obstáculo cuando un PDF contiene solo gráficos vectoriales o una firma digital basada en SHA‑3: los convertidores estándar o rasterizan todo o ignoran la firma por completo. + +En esta guía recorreremos una solución práctica usando **Aspose.Pdf** para .NET: primero eliminaremos las imágenes raster mientras convertimos un PDF solo vectorial en HTML limpio, luego te mostraremos cómo **verificar la firma PDF** (sí, la de SHA‑3‑256) y presentar el resultado en la consola. Al final tendrás un programa C# listo para ejecutar que realiza ambas tareas, además de varios consejos para evitar errores comunes. + +## Lo que Necesitarás + +- **Aspose.Pdf for .NET** (la última versión a partir de 2026‑04, por ejemplo, 23.12). +- Un entorno de desarrollo .NET (Visual Studio 2022 o VS Code con la extensión C#). +- Dos PDFs de ejemplo: + 1. `vectorOnly.pdf` – contiene solo vectores y texto, sin imágenes raster. + 2. `signed_sha3.pdf` – firmado digitalmente con un hash SHA‑3‑256. + +No se requieren paquetes NuGet adicionales más allá de `Aspose.Pdf`. + +--- + +## Paso 1: Configurar el Proyecto y Cargar los PDFs + +Crea una nueva aplicación de consola, agrega el paquete NuGet Aspose.Pdf y trae los espacios de nombres al alcance. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Por qué es importante*: Cargar los documentos al principio nos permite reutilizar los objetos tanto para la conversión como para la verificación de la firma, manteniendo bajo el uso de memoria. + +--- + +## Paso 2: Convertir PDF a HTML Omiteando Imágenes Raster + +`HtmlSaveOptions` de Aspose.Pdf te brinda un control granular sobre cómo se manejan las imágenes. Configurar `RasterImagesSavingMode` a `Skip` indica a la biblioteca que ignore completamente las imágenes raster—perfecto para una fuente solo vectorial. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Salida esperada**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Consejo profesional*: Si más adelante necesitas incrustar el HTML en una página web, el archivo generado contiene solo SVG y CSS—sin bloques voluminosos de PNG/JPEG. + +--- + +## Paso 3: Preparar el Manejador de Firmas + +La clase `PdfFileSignature` de Aspose.Pdf es el punto de entrada para cualquier trabajo con firmas digitales. Lee el diccionario de firmas, extrae el nombre y permite verificar usando un algoritmo de hash específico. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Por qué este paso es crucial*: Sin el manejador no puedes enumerar firmas ni seleccionar el algoritmo de hash que necesitas (p. ej., SHA‑3‑256). + +--- + +## Paso 4: Enumerar y Verificar Cada Firma Usando SHA‑3‑256 + +El método `GetSignNames()` devuelve todas las etiquetas de firma en el PDF. Recorre la lista, llama a `VerifySignature` con `DigestHashAlgorithm.Sha3_256` y muestra el resultado. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Salida de consola de ejemplo**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Caso límite*: Si una firma usa un hash diferente (p. ej., SHA‑256) la verificación devolverá `False`. Puedes agregar una comprobación de respaldo probando otros valores de `DigestHashAlgorithm` dentro del bucle. + +--- + +## Paso 5: Ejemplo Completo (Todo el Código en Un Solo Lugar) + +A continuación tienes el programa completo que puedes copiar y pegar en `Program.cs`. Sustituye `YOUR_DIRECTORY` por la carpeta real donde se encuentran tus PDFs. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Ejecuta el programa (`dotnet run` o pulsa **F5** en Visual Studio). Deberías ver la confirmación de la conversión seguida de los resultados de la verificación de la firma. + +--- + +## Preguntas Frecuentes & Cómo Abordarlas + +| Pregunta | Respuesta | +|----------|-----------| +| **¿El HTML seguirá conteniendo las fuentes originales?** | Aspose.Pdf incrusta las fuentes usadas como URIs de datos base‑64 por defecto, por lo que la salida se renderiza correctamente aun si la máquina anfitriona no dispone de esas fuentes. | +| **¿Qué pasa si mi PDF tiene tanto vectores *como* imágenes?** | Mantén `RasterImagesSavingMode = Skip` para eliminar las imágenes, o cambia a `EmbedAll` si las necesitas. La opción es por conversión, así que puedes ejecutar dos pasadas si requieres ambas versiones. | +| **Mi firma usa SHA‑512—¿cómo la verifico?** | Sustituye `DigestHashAlgorithm.Sha3_256` por `DigestHashAlgorithm.Sha512`. Incluso puedes detectar el algoritmo desde el diccionario de firma y elegir dinámicamente. | +| **¿Hay forma de obtener los detalles del certificado del firmante?** | Sí. Después de la verificación, llama a `signatureHandler.GetSignatureInfo(signName).Certificate` para obtener el certificado X.509 e inspeccionar campos como `Subject` e `Issuer`. | +| **¿Qué ocurre si el PDF está protegido con contraseña?** | Cárgalo con `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. El resto del flujo de trabajo permanece igual. | + +--- + +## Consejos Profesionales para Código Listo para Producción + +1. **Liberar PDFs Correctamente** – Envuelve las instancias de `PdfDocument` en un bloque `using` o llama a `Dispose()` para liberar recursos nativos. +2. **Procesamiento por Lotes** – Si tienes decenas de PDFs, itera sobre un directorio, guarda los resultados en un CSV y paraleliza la conversión con `Parallel.ForEach`. +3. **Registro (Logging)** – Sustituye `Console.WriteLine` por un logger estructurado (Serilog, NLog) para mejor trazabilidad, especialmente al verificar muchas firmas. +4. **Manejo de Errores** – Captura `Aspose.Pdf.Exceptions` para tratar archivos corruptos de forma elegante: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Compatibilidad de Versiones** – Aspose.Pdf evoluciona rápidamente. Siempre prueba con la versión exacta referenciada en tu `csproj`. La API mostrada funciona para 23.x y posteriores. + +--- + +## Conclusión + +Acabamos de **convertir PDF a HTML** preservando solo vectores y texto, y de **verificar la firma PDF** usando el algoritmo SHA‑3‑256, todo con unas pocas líneas de C#. Los puntos clave son: + +- Usa `HtmlSaveOptions.RasterImagesSavingMode = Skip` para obtener HTML limpio solo vectorial. +- Aprovecha `PdfFileSignature` y `DigestHashAlgorithm.Sha3_256` para **comprobar la firma digital del PDF** de forma fiable. + +A partir de aquí puedes explorar temas relacionados como **aspose pdf conversion** de PDFs a PNG, extracción de archivos incrustados, o crear un servicio web que acepte PDFs y devuelva fragmentos HTML verificados. + +Pruébalo, ajusta las opciones y cuéntanos qué descubres. ¡Feliz codificación! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/spanish/net/digital-signatures/_index.md b/pdf/spanish/net/digital-signatures/_index.md index ff2ccf3a4..61d937519 100644 --- a/pdf/spanish/net/digital-signatures/_index.md +++ b/pdf/spanish/net/digital-signatures/_index.md @@ -64,6 +64,12 @@ 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. +### [Verificar firma PDF y agregar numeración Bates – Guía completa en C#](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Aprenda a validar firmas PDF y añadir numeración Bates usando Aspose.PDF en C# con ejemplos paso a paso. + +### [Cómo extraer firmas de PDF – Guía Aspose C#](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Aprenda a extraer firmas digitales de PDFs usando Aspose.PDF con C#. + ## 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-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/spanish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..c03f48d57 --- /dev/null +++ b/pdf/spanish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-02 +description: Aprenda cómo extraer firmas, agregar campos, añadir una página en blanco + a un PDF, cómo agregar widgets y preservar la transparencia en PDF usando Aspose.Pdf + en C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: es +og_description: Cómo extraer firmas de un PDF y realizar tareas relacionadas como + agregar campos, páginas en blanco, widgets y preservar la transparencia usando Aspose.Pdf. +og_title: Cómo extraer firmas de PDF – Guía Aspose C# +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Cómo extraer firmas de PDF – Guía de Aspose C# +url: /es/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo extraer firmas de PDF – Guía Aspose C# + +**Cómo extraer firmas de un PDF** es un requisito común cuando automatizas el procesamiento de contratos, aprobaciones de facturas o cualquier flujo de trabajo que dependa de firmas digitales. +En esta guía también veremos **cómo agregar campo**, **agregar página en blanco PDF**, **cómo agregar widget** y **preservar transparencia PDF** usando la biblioteca Aspose.Pdf para .NET. + +Imagina que recibes docenas de PDFs firmados cada noche; abrir manualmente cada archivo para verificar las firmas sería una pesadilla. Con unas pocas líneas de código C# puedes obtener programáticamente los nombres de las firmas, mantener intactas tus gráficas originales e incluso enriquecer el documento con nuevos campos de formulario, todo sin romper la transparencia ni los perfiles de color existentes. + +> **Lo que obtendrás:** un ejemplo completo y ejecutable que convierte un PDF a PDF/X‑4 (preservando la transparencia), extrae cada nombre de firma incrustada, agrega una página en blanco y crea un campo de texto que aparece en dos lugares de la misma página. + +## Requisitos previos + +- .NET 6.0 o posterior (el código también funciona con .NET Framework) +- Aspose.Pdf para .NET **v25.2** o más reciente (requerido para `GetSignatureNames()`) +- Un proyecto de Visual Studio o cualquier IDE de C# +- Tres PDFs de muestra en una carpeta que controles: + - `source.pdf` – cualquier PDF que quieras convertir manteniendo la transparencia + - `signed.pdf` – un PDF que ya contiene firmas digitales + - (opcional) una carpeta vacía para los archivos de salida + +> **Consejo profesional:** Si aún no tienes una copia con licencia, puedes solicitar una licencia temporal gratuita desde el sitio web de Aspose. El modo gratuito funciona para pruebas pero agrega una marca de agua. + +## Paso 1 – Preservar transparencia PDF convirtiendo a PDF/X‑4 + +La transparencia y los perfiles de color incrustados a menudo se pierden al aplanar un PDF. Convertir a **PDF/X‑4** mantiene esos elementos visuales intactos, lo cual es crucial para documentos listos para imprimir. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Por qué es importante:** +PDF/X‑4 es el estándar ISO para PDFs de intercambio gráfico que conservan la transparencia en vivo. Al usar `PdfFormatConversionOptions`, evitas la trampa común de rasterizar objetos transparentes, lo que puede aumentar drásticamente el tamaño del archivo y degradar la calidad. + +## Paso 2 – Cómo extraer firmas de un PDF + +Aspose introdujo `GetSignatureNames()` en la versión 25.2, haciendo que la extracción de firmas sea una sola línea. El método devuelve una matriz con los nombres lógicos asignados a cada campo de firma digital. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**Qué esperar:** Si `signed.pdf` contiene dos firmas llamadas *ManagerSig* y *ClientSig*, la consola imprimirá: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Manejo de casos límite:** +- Si el PDF no tiene firmas, `GetSignatureNames()` devuelve una matriz vacía – no se lanza ninguna excepción. +- Para PDFs con campos de firma corruptos, puedes envolver la llamada en un `try/catch` y registrar el error sin abortar todo el proceso. + +## Paso 3 – Agregar página en blanco PDF y crear un TextBox con múltiples widgets + +Agregar una nueva página es sencillo, pero **cómo agregar campo** y **cómo agregar widget** juntos requiere un poco de sutileza. Un *widget* es la representación visual de un campo de formulario; puedes adjuntar varios widgets al mismo campo lógico, permitiendo que los mismos datos aparezcan en múltiples ubicaciones. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**¿Por qué usar múltiples widgets?** +Supongamos que necesitas que el mismo comentario aparezca tanto en la parte frontal como en la posterior de un contrato. Al adjuntar dos widgets al mismo campo, cualquier cambio que el usuario haga en una ubicación se actualiza automáticamente en la otra. + +**Errores comunes:** +- Olvidar agregar el campo a `newDoc.Form` hará que el widget sea invisible en los visores de PDF. +- Usar coordenadas de rectángulo idénticas para ambos widgets los superpondrá – asegúrate de que los valores de `Rectangle` sean diferentes. + +## Paso 4 – Uniendo todo: un ejemplo completo y ejecutable + +A continuación tienes un programa único que ejecuta cada paso en el orden presentado. Copia‑pega el código en un nuevo proyecto de consola, ajusta las rutas y ejecútalo. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Salida esperada + +Al ejecutar el programa deberías ver algo como: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Abre `TextBoxMultipleWidgets.pdf` en Adobe Acrobat Reader; notarás dos cuadros de texto idénticos etiquetados **Comments**—uno cerca de la parte superior y otro un poco más abajo. Escribir en uno actualiza el otro al instante. + +## Preguntas frecuentes (FAQ) + +| Pregunta | Respuesta | +|----------|-----------| +| **¿Puedo extraer los bytes reales de la firma?** | `GetSignatureNames()` solo devuelve los nombres lógicos. Para obtener el certificado o el valor de la firma necesitas objetos `SignatureField` (`document.Form["fieldName"] as SignatureField`). | +| **¿La conversión a PDF/X‑4 funciona con PDFs encriptados?** | Sí, siempre que proporciones la contraseña mediante `Document.Open(file, password)`. | +| **¿Qué pasa si necesito más de dos widgets?** | Simplemente llama a `textBox.Widgets.Add()` por cada `WidgetAnnotation` adicional. | +| **¿La página en blanco heredará el tamaño de página del PDF original?** | La nueva página usa el tamaño predeterminado (A4). Puedes pasar un objeto `Page` con dimensiones personalizadas si lo necesitas. | +| **¿El código es compatible con .NET Core?** | Absolutamente—Aspose.Pdf es multiplataforma. Solo referencia el paquete NuGet en tu proyecto .NET Core. | + +## Conclusión + +En este tutorial demostramos **cómo extraer firmas de PDF**, mientras también cubrimos **cómo agregar campo**, **agregar página en blanco PDF**, **cómo agregar widget** y **preservar transparencia PDF** usando Aspose.Pdf para C#. Ahora dispones de una solución sólida de extremo a extremo que puedes integrar en cualquier canal de procesamiento de documentos. + +¿Listo para el siguiente desafío? Prueba combinar estas técnicas con el módulo OCR de Aspose para leer texto de escaneados + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/spanish/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..55b9e9faa --- /dev/null +++ b/pdf/spanish/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,223 @@ +--- +category: general +date: 2026-04-02 +description: Verifique la firma de PDF rápidamente y aprenda cómo agregar numeración + Bates usando Aspose.Pdf. Incluye código paso a paso y consejos. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: es +og_description: Verifique rápidamente la firma de PDF y aprenda cómo agregar numeración + Bates usando Aspose.Pdf. Siga el ejemplo completo y evite los errores comunes. +og_title: Verificar la firma PDF y añadir numeración Bates – Guía completa de C# +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: Verificar la firma PDF y agregar numeración Bates – Guía completa de C# +url: /es/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Verificar la firma PDF y agregar numeración Bates – Guía completa en C# + +¿Alguna vez necesitaste **verificar la firma PDF** antes de enviar un contrato, pero no sabías qué llamada API usar? No estás solo: muchos desarrolladores se topan con ese obstáculo al manejar PDFs legalmente vinculantes. En este tutorial recorreremos paso a paso **cómo verificar la firma PDF** con Aspose.Pdf y luego te mostraremos **cómo agregar numeración Bates** para que tus archivos estén listos para auditorías. + +También abordaremos **cómo verificar la firma** programáticamente, cubriremos **cómo agregar Bates** en una sola pasada y explicaremos los resultados de **check pdf signature** para que confíes en la salida. Al final tendrás una aplicación de consola en C# que realiza ambas tareas—sin misterios, solo código claro. + +--- + +## Lo que necesitarás + +- **.NET 6.0** o posterior (el ejemplo también funciona con .NET Framework 4.7+). +- Paquete NuGet **Aspose.Pdf for .NET** (versión 23.11 o más reciente). +- Un archivo PDF firmado (`signed.pdf`) que deseas validar. +- Un PDF simple (`input.pdf`) que recibirá los números Bates. + +Si ya cuentas con eso, estás listo para continuar. No se requieren SDK adicionales ni archivos de configuración ocultos. + +--- + +## Paso 1: Configurar el proyecto + +Comienza creando un proyecto de consola: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Abre `Program.cs` y elimina el código predeterminado. Construiremos todo desde cero para que puedas copiar‑pegar la versión final más adelante. + +--- + +## Paso 2: Verificar la firma PDF + +### Por qué la verificación es importante + +Una firma digital puede estar **comprometida** si el certificado subyacente es revocado o el documento fue manipulado después de la firma. Aspose.Pdf nos brinda el práctico método `IsSignatureCompromised` que devuelve un booleano—simple, pero lo suficientemente potente para la mayoría de los flujos de auditoría. + +### Fragmento de código + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Explicación** + +- `Document` carga el PDF en memoria. +- `PdfFileSignature` envuelve el documento y expone los métodos relacionados con firmas. +- `IsSignatureCompromised("Signature1")` verifica la integridad de la firma llamada *Signature1*. +- El resultado booleano indica si la firma sigue siendo confiable. + +> **Consejo profesional:** Si no estás seguro del nombre del campo de firma, llama primero a `pdfSignature.GetSignatureNames()`; devuelve una lista con todos los identificadores de firma. + +--- + +## Paso 3: Preparar las opciones de numeración Bates + +### ¿Qué es la numeración Bates? + +Los números Bates son identificadores secuenciales impresos en cada página de un documento legal o forense. Facilitan la referencia de páginas durante procesos de descubrimiento o auditoría. `BatesNumberingOptions` de Aspose.Pdf te permite personalizar prefijo, número inicial, cantidad de dígitos, alineación y margen—todo en un solo objeto. + +### Continuación del código + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Explicación** + +- `BatesNumberingOptions` centraliza todas las opciones de formato. +- `AddBatesNumbering` recorre automáticamente cada página—no necesitas un bucle manual. +- El `Prefix` (`INV-`) y `StartNumber` (1000) generan etiquetas como `INV-01000`, `INV-01001`, etc. +- Ajusta `BottomMargin` si necesitas que el número esté más alto o más bajo en la página. + +--- + +## Paso 4: Ejecutar el ejemplo completo + +Guarda el archivo y luego ejecuta: + +```bash +dotnet run +``` + +Deberías ver dos líneas en la consola: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Si la primera línea muestra `True`, la firma está comprometida—lo que significa que el documento pudo haber sido alterado después de la firma o que el certificado ya no es válido. En ese caso, aborta cualquier procesamiento posterior. + +--- + +## Paso 5: Casos límite comunes y cómo manejarlos + +| Situación | Qué observar | Solución sugerida | +|-----------|--------------|-------------------| +| **Múltiples firmas** | `IsSignatureCompromised` solo verifica un campo a la vez. | Recorrer `pdfSignature.GetSignatureNames()` y verificar cada una. | +| **Nombre de campo de firma personalizado** | Usar `"Signature1"` puede lanzar una excepción si el nombre difiere. | Obtén primero la lista de nombres, o pasa el nombre exacto que ves en Acrobat. | +| **PDFs grandes (100+ páginas)** | Agregar números Bates puede consumir mucha memoria. | Usa `Document.Save` con `SaveOptions` que habiliten streaming (`PdfSaveOptions { Compress = true }`). | +| **Caracteres no latinos en el prefijo** | Algunas fuentes no soportan Unicode por defecto. | Establece `pdfWithBates.Font` a una fuente compatible con Unicode como `Arial Unicode MS`. | +| **Necesidad de colocar los números a la izquierda** | La alineación está codificada como `Right`. | Cambia `Alignment = HorizontalAlignment.Left` en `BatesNumberingOptions`. | + +--- + +## Paso 6: Verificar el resultado manualmente (opcional) + +Abre `BatesNumbered.pdf` en cualquier visor de PDF: + +1. Recorre las páginas—cada una debe mostrar una etiqueta como **INV‑01000** en la esquina inferior derecha. +2. Usa el **Panel de firmas** de Acrobat, haz doble clic en la firma y confirma que el estado coincida con la salida de la consola. + +Si todo coincide, has verificado con éxito el **check pdf signature** y aplicado **add bates numbering** en una sola operación. + +--- + +## Preguntas frecuentes + +**P: ¿Puedo verificar una firma sin cargar todo el documento?** +R: Aspose.Pdf transmite el archivo bajo el capó, pero aún necesitas una instancia de `Document`. Para archivos muy grandes, considera usar `PdfFileSignature` directamente con un flujo de archivo para reducir el consumo de memoria. + +**P: ¿Necesito una licencia para Aspose.Pdf?** +R: La evaluación gratuita funciona, pero agrega una marca de agua. Para producción necesitarás una licencia adecuada; de lo contrario los PDFs de salida llevarán el banner de Aspose. + +**P: ¿Qué pasa si solo quiero agregar números Bates a un subconjunto de páginas?** +R: Usa `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` donde el arreglo indica los números de página que deseas numerar. + +--- + +## Conclusión + +Ahora sabes **cómo verificar la firma PDF** con Aspose.Pdf, entiendes el significado del resultado booleano y puedes **agregar numeración Bates** a cualquier PDF bajo tu control. El ejemplo completo y ejecutable combina ambas tareas, dándote una herramienta de consola única que verifica la autenticidad de un documento y lo sella con identificadores listos para auditoría. + +A continuación, podrías explorar **cómo verificar la firma** contra un almacén de raíces confiables, o experimentar con estilos personalizados de **add bates numbering** como sellos diagonales o prefijos por sección. Ambos temas se basan en la base que acabas de dominar y harán que tu canal de procesamiento de documentos sea aún más robusto. + +¡Feliz codificación, y recuerda—comprobar firmas y numerar páginas es pan comido una vez que tienes el código correcto! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/spanish/net/printing-rendering/_index.md index f42daee33..6919d2e10 100644 --- a/pdf/spanish/net/printing-rendering/_index.md +++ b/pdf/spanish/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Aprenda a imprimir páginas específicas de un PDF de forma eficiente con Aspose ### [Configurar un factor de zoom personalizado en archivos PDF con Aspose.PDF para .NET: una guía completa](./aspose-pdf-net-set-zoom-factor-pdfs/) Aprenda a configurar un factor de zoom personalizado en documentos PDF con Aspose.PDF para .NET. Esta guía explica la instalación, los pasos de implementación y sus aplicaciones prácticas. +### [Cómo renderizar PDF en C# – Guía completa de PNG, HTML y estampado](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Aprenda a convertir PDFs a PNG, generar HTML y aplicar marcas de agua usando Aspose.PDF para .NET en C#. + ## Recursos adicionales - [Documentación de Aspose.PDF para la red](https://docs.aspose.com/pdf/net/) diff --git a/pdf/spanish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/spanish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..259a5ad2b --- /dev/null +++ b/pdf/spanish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-04-02 +description: Cómo renderizar PDF usando Aspose.PDF en C#. Aprende a renderizar PDF + a PNG, guardar PDF como HTML y agregar sellos de texto de ajuste automático de manera + eficiente. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: es +og_description: Cómo renderizar PDF usando Aspose.PDF en C#. Esta guía muestra cómo + renderizar PDF a PNG, guardar como HTML y crear sellos de texto de ajuste automático. +og_title: Cómo renderizar PDF en C# – PNG, HTML y sellos de ajuste automático +tags: +- Aspose.PDF +- C# +- PDF processing +title: Cómo renderizar PDF en C# – Guía completa de PNG, HTML y estampado +url: /es/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo renderizar PDF en C# – Guía completa para PNG, HTML y Stamping + +¿Alguna vez te has preguntado **cómo renderizar PDF** en una aplicación .NET sin perder ni un solo glifo? Tal vez intentaste un rápido `PdfRenderer` y viste caracteres faltantes, o necesitas un PNG nítido para una miniatura pero la salida se ve dentada. En mi experiencia, la combinación adecuada de opciones de renderizado y manejo de fuentes marca la diferencia entre una vista previa rota y una imagen pixel‑perfecta. + +En este tutorial recorreremos tres escenarios del mundo real con Aspose.PDF para .NET: renderizar una página PDF a PNG mientras se analizan las fuentes, añadir un `TextStamp` que redimensiona automáticamente su fuente, y guardar un PDF como HTML usando la tabla CMap de la fuente. Al final podrás **renderizar PDF a PNG**, **convertir página PDF a PNG**, **exportar imagen de página PDF**, e incluso **guardar PDF como HTML** sin problemas. + +## Prerequisitos + +- .NET 6.0 o posterior (el código también funciona en .NET Framework 4.6+) +- Paquete NuGet Aspose.PDF para .NET (`Install-Package Aspose.PDF`) +- Un archivo PDF con fuentes complejas (p. ej., `complexFonts.pdf`) para la demostración de renderizado +- Familiaridad básica con C# y Visual Studio (o cualquier IDE que prefieras) + +> **Consejo profesional:** Si trabajas en un servidor CI, asegúrate de que el archivo de licencia de Aspose esté incrustado como recurso o referenciado mediante una variable de entorno para evitar marcas de agua de evaluación. + +--- + +## ## Cómo renderizar PDF a PNG con análisis de fuentes + +### ¿Por qué analizar fuentes? + +Cuando un PDF contiene fuentes personalizadas o incrustadas, un renderizado ingenuo puede omitir glifos que el motor no puede mapear. Activar `AnalyzeFonts` obliga a Aspose a inspeccionar los flujos de fuentes y sustituir los glifos faltantes, garantizando una imagen fiel. + +### Implementación paso a paso + +1. **Crear un `PngDevice` con `AnalyzeFonts` habilitado.** +2. **Cargar el PDF de origen** usando `Document`. +3. **Procesar la página deseada** y escribir el PNG en disco. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**Lo que deberías ver:** Un archivo llamado `rendered.png` en `YOUR_DIRECTORY` que se ve idéntico a la primera página de `complexFonts.pdf`, incluyendo todos los caracteres especiales y diacríticos. + +![Página PDF renderizada como imagen PNG](rendered.png "Página PDF renderizada como imagen PNG") + +#### Trampas comunes y cómo evitarlas + +- **Fuentes faltantes en el servidor:** Si el PDF hace referencia a fuentes no incrustadas, coloca esas fuentes en la ruta de búsqueda de la aplicación o habilita `FontRepository` para apuntar a una carpeta personalizada. +- **PDFs grandes:** Renderizar muchas páginas en un bucle puede consumir memoria; libera cada instancia de `Document` rápidamente o usa bloques `using` como se muestra. + +--- + +## ## Añadiendo un TextStamp de ajuste automático (Renderizar PDF con texto dinámico) + +### ¿Cuándo necesitas un sello de tamaño dinámico? + +Imagina que generas facturas y necesitas superponer una marca de agua “PAID” que se ajuste a cualquier rectángulo que elijas, sin importar la longitud del texto. Calcular manualmente el tamaño de fuente es propenso a errores; `AutoAdjustFontSizeToFitStampRectangle` de Aspose hace el trabajo pesado. + +### Implementación paso a paso + +1. **Configurar un `TextStamp`** con propiedades de ajuste automático. +2. **Cargar el PDF objetivo** que deseas sellar. +3. **Añadir el sello a una página** y guardar el resultado. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Resultado:** `stampAutoFit.pdf` contiene el texto “Important notice” perfectamente dimensionado al rectángulo de 300 × 150 pt, sin importar la longitud original de la cadena. + +#### Casos límite a considerar + +- **Cadenas muy largas:** Si el texto supera el rectángulo incluso con el tamaño de fuente más pequeño, Aspose lo truncará según `WordWrapMode`. Puedes pre‑verificar la longitud o aumentar el tamaño del rectángulo. +- **Múltiples sellos:** Reutilizar la misma instancia de `TextStamp` en diferentes páginas funciona, pero recuerda que las propiedades de posición (`Left`, `Top`) conservan sus últimos valores; restáuralas según sea necesario. + +--- + +## ## Guardar PDF como HTML usando la tabla CMap de la fuente + +### ¿Por qué preocuparse por la tabla CMap? + +Al convertir un PDF a HTML, preservar el mapeo Unicode es crucial para que el texto sea buscable. La estrategia basada en CMap obliga a Aspose a priorizar el mapa de caracteres interno de la fuente, lo que suele producir una extracción de texto más precisa que una codificación genérica. + +### Implementación paso a paso + +1. **Crear `HtmlSaveOptions`** con la regla de codificación basada en CMap. +2. **Cargar el PDF de origen**. +3. **Guardar como HTML** usando las opciones configuradas. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**Lo que obtendrás:** Una carpeta (si `SplitIntoPages` es true) que contiene `cmapHtml.html` y los recursos asociados. Abre el HTML en un navegador y notarás texto seleccionable y buscable que coincide casi perfectamente con el PDF original. + +#### Consejos para una exportación HTML limpia + +- **Imágenes vs. vectores:** Establece `RasterImagesSavingMode` a `RasterImagesSavingMode.AsEmbeddedPartsOfPng` si prefieres PNGs sobre JPEGs para obtener gráficos más nítidos. +- **PDFs grandes:** Usa `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` para mantener cada página ligera. + +--- + +## ## Ejemplo completo – Los tres escenarios en un solo proyecto + +A continuación tienes una aplicación de consola autónoma que demuestra las tres técnicas lado a lado. Copia‑pega el código en un nuevo proyecto de consola C#, agrega el paquete NuGet Aspose.PDF y ajusta las rutas de archivo. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Ejecuta el programa y encontrarás: + +- `rendered.png` – una imagen perfecta de la primera página del PDF. +- `stampAutoFit.pdf` – el PDF original con un sello “Important notice” de tamaño dinámico. +- `cmapHtml.html` (más archivos HTML por página) – una versión HTML que preserva la codificación de texto original. + +--- + +## ## Preguntas frecuentes (FAQ) + +**Q: ¿`AnalyzeFonts` incrementa el tiempo de renderizado?** +A: Un poco, porque Aspose escanea cada flujo de fuente. La compensación suele valer la pena para PDFs complejos donde los glifos faltantes son inaceptables. + +**Q: ¿Puedo renderizar varias páginas en un bucle?** +A: Por supuesto. Simplemente itera sobre `sourcePdf.Pages` y llama a `pngDevice.Process(page, $"page{page.Number}.png")`. Recuerda liberar cada `Document` si los abres por separado. + +**Q: ¿Qué pasa si** + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 2dc154c3a..fb92a1f0c 100644 --- a/pdf/swedish/net/conversion-export/_index.md +++ b/pdf/swedish/net/conversion-export/_index.md @@ -227,6 +227,9 @@ 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. +### [Konvertera PDF till HTML och verifiera PDF-signatur – Fullständig Aspose .NET-guide](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Lär dig hur du konverterar PDF till HTML och verifierar PDF-signaturer med Aspose.PDF för .NET i en komplett guide. + ## Ytterligare resurser - [Aspose.PDF för nätdokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/swedish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/swedish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..9ae7614d8 --- /dev/null +++ b/pdf/swedish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,258 @@ +--- +category: general +date: 2026-04-02 +description: Konvertera PDF till HTML samtidigt som vektorer behålls, och verifiera + sedan PDF‑signatur med Aspose PDF. Lär dig Aspose PDF‑konvertering och kontrollera + PDF:s digitala signatur i C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: sv +og_description: Konvertera PDF till HTML samtidigt som du bevarar vektorer och verifiera + PDF‑signatur med Aspose PDF. Steg‑för‑steg C#‑kod, tips och hantering av kantfall. +og_title: Konvertera PDF till HTML & verifiera PDF‑signatur – Komplett Aspose .NET‑handledning +tags: +- Aspose.PDF +- C# +- PDF processing +title: Konvertera PDF till HTML och verifiera PDF‑signatur – Fullständig Aspose .NET‑guide +url: /sv/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Konvertera PDF till HTML och verifiera PDF‑signatur – Komplett Aspose .NET‑handledning + +Har du någonsin behövt **konvertera PDF till HTML** men oroat dig för att förlora vektor­kvalitet eller förstöra digitala signaturer? Du är inte ensam. Många utvecklare stöter på problem när en PDF bara innehåller vektorgrafik eller en SHA‑3‑baserad digital signatur – standardkonverterare rasteriserar antingen allt eller ignorerar signaturen helt. + +I den här guiden går vi igenom en praktisk lösning med **Aspose.Pdf** för .NET: först tar vi bort rasterbilder medan vi omvandlar en PDF som bara innehåller vektorer till ren HTML, sedan visar vi hur du **verifierar PDF‑signatur** (ja, SHA‑3‑256‑signaturen) och visar resultatet i konsolen. I slutet har du ett färdigt C#‑program som utför båda uppgifterna, plus några tips för att undvika vanliga fallgropar. + +## Vad du behöver + +- **Aspose.Pdf for .NET** (den senaste versionen per 2026‑04, t.ex. 23.12). +- En .NET‑utvecklingsmiljö (Visual Studio 2022 eller VS Code med C#‑tillägget). +- Två exempel‑PDF‑filer: + 1. `vectorOnly.pdf` – innehåller endast vektorer och text, inga rasterbilder. + 2. `signed_sha3.pdf` – digitalt signerad med en SHA‑3‑256‑hash. + +Inga extra NuGet‑paket utöver `Aspose.Pdf` krävs. + +--- + +## Steg 1: Ställ in projektet och läs in PDF-filerna + +Skapa en ny konsolapp, lägg till Aspose.Pdf‑NuGet och importera de nödvändiga namnutrymmena. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Varför detta är viktigt*: Att ladda dokumenten i förväg låter oss återanvända objekten för både konvertering och signaturverifiering, vilket håller minnesanvändningen låg. + +--- + +## Steg 2: Konvertera PDF till HTML samtidigt som rasterbilder hoppas över + +`HtmlSaveOptions` i Aspose.Pdf ger dig fin­granulär kontroll över hur bilder hanteras. Genom att sätta `RasterImagesSavingMode` till `Skip` instrueras biblioteket att helt ignorera rasterbilder – perfekt för en källa som bara innehåller vektorer. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Förväntad utdata**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Proffstips*: Om du senare behöver bädda in HTML‑koden i en webbsida innehåller den genererade filen bara SVG och CSS – inga tunga PNG/JPEG‑blobbar. + +--- + +## Steg 3: Förbered signaturhanteraren + +Klassen `PdfFileSignature` i Aspose.Pdf är ingångspunkten för allt arbete med digitala signaturer. Den läser signatur‑dictionaryn, extraherar namnet och låter dig verifiera med en specifik hash‑algoritm. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Varför detta steg är avgörande*: Utan hanteraren kan du varken lista signaturer eller välja den hash‑algoritm du behöver (t.ex. SHA‑3‑256). + +--- + +## Steg 4: Enumerera och verifiera varje signatur med SHA‑3‑256 + +Metoden `GetSignNames()` returnerar alla signatur‑etiketter i PDF‑filen. Loopa igenom dem, anropa `VerifySignature` med `DigestHashAlgorithm.Sha3_256` och skriv ut resultatet. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Exempel på konsolutdata**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Edge case*: Om en signatur använder en annan hash (t.ex. SHA‑256) returnerar verifieringen `False`. Du kan lägga till en fallback‑kontroll genom att prova andra `DigestHashAlgorithm`‑värden i loopen. + +--- + +## Steg 5: Fullt fungerande exempel (All kod på ett ställe) + +Nedan är hela programmet som du kan kopiera‑klistra in i `Program.cs`. Ersätt `YOUR_DIRECTORY` med den faktiska mappen där dina PDF‑filer ligger. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Kör programmet (`dotnet run` eller tryck **F5** i Visual Studio). Du bör se en bekräftelse på konverteringen följt av resultaten från signaturverifieringen. + +--- + +## Vanliga frågor & hur man hanterar dem + +| Fråga | Svar | +|----------|--------| +| **Kommer HTML‑filen fortfarande innehålla de ursprungliga teckensnitten?** | Aspose.Pdf bäddar in de använda teckensnitten som base‑64‑data‑URI:er som standard, så utdata renderas korrekt även om värddatorn saknar dessa teckensnitt. | +| **Vad händer om min PDF har både vektorer *och* bilder?** | Behåll `RasterImagesSavingMode = Skip` för att ta bort bilder, eller byt till `EmbedAll` om du behöver dem. Alternativet gäller per konvertering, så du kan köra två pass om du behöver båda versionerna. | +| **Min signatur använder SHA‑512 – hur verifierar jag den?** | Byt ut `DigestHashAlgorithm.Sha3_256` mot `DigestHashAlgorithm.Sha512`. Du kan även upptäcka algoritmen från signatur‑dictionaryn och välja dynamiskt. | +| **Finns det ett sätt att hämta signerarens certifikatdetaljer?** | Ja. Efter verifiering, anropa `signatureHandler.GetSignatureInfo(signName).Certificate` för att hämta X.509‑certifikatet och inspektera fält som `Subject` och `Issuer`. | +| **Vad händer om PDF‑filen är lösenordsskyddad?** | Läs in den med `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. Resten av arbetsflödet förblir detsamma. | + +--- + +## Proffstips för produktionsklar kod + +1. **Dispose PDFs Properly** – Wrappa `PdfDocument`‑instanser i ett `using`‑block eller anropa `Dispose()` för att frigöra inhemska resurser. +2. **Batch Processing** – Om du har dussintals PDF‑filer, iterera över en katalog, lagra resultat i en CSV och parallellisera konverteringen med `Parallel.ForEach`. +3. **Logging** – Ersätt `Console.WriteLine` med en strukturerad logger (Serilog, NLog) för bättre spårbarhet, särskilt när du verifierar många signaturer. +4. **Error Handling** – Fånga `Aspose.Pdf.Exceptions` för att hantera korrupta filer på ett smidigt sätt: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Version Compatibility** – Aspose.Pdf utvecklas snabbt. Testa alltid med exakt den version som refereras i din `csproj`. API‑exemplen fungerar för 23.x och senare. + +--- + +## Slutsats + +Vi har precis **konverterat PDF till HTML** samtidigt som vi bevarat endast vektorer och text, och vi har **verifierat PDF‑signatur** med SHA‑3‑256‑algoritmen – allt med några få rader C#. De viktigaste insikterna är: + +- Använd `HtmlSaveOptions.RasterImagesSavingMode = Skip` för ren HTML som bara innehåller vektorer. +- Utnyttja `PdfFileSignature` och `DigestHashAlgorithm.Sha3_256` för att **kontrollera PDF‑digital‑signatur** på ett pålitligt sätt. + +Härifrån kan du utforska relaterade ämnen som **aspose pdf conversion** av PDF‑filer till PNG, extrahera inbäddade filer, eller bygga en webbtjänst som tar emot PDF‑filer och returnerar verifierade HTML‑snuttar. + +Ge det ett försök, justera alternativen och låt oss veta vad du upptäcker. Happy coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/swedish/net/digital-signatures/_index.md b/pdf/swedish/net/digital-signatures/_index.md index 777d04f05..dd5e63803 100644 --- a/pdf/swedish/net/digital-signatures/_index.md +++ b/pdf/swedish/net/digital-signatures/_index.md @@ -26,6 +26,9 @@ Lär dig hur du digitalt signerar en PDF med anpassat utseende med Aspose.PDF f ### [Extrahera information om digital signatur från PDF-filer med Aspose.PDF](./extract-digital-signature-info-from-pdfs-aspose-pdf/) En kodhandledning för Aspose.PDF Net +### [Hur man extraherar signaturer från PDF – Aspose C#-guide](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Lär dig hur du med Aspose i C# extraherar signaturer från PDF-dokument på ett enkelt sätt. + ### [Hur man ändrar PDF-signaturspråk med Aspose.PDF för .NET](./change-pdf-signature-language-aspose-net/) Lär dig hur du anpassar text för digital signatur i PDF-filer med Aspose.PDF för .NET. Perfekt för flerspråkig dokumentförberedelse och lokalisering. @@ -59,6 +62,9 @@ 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. +### [Verifiera PDF-signatur och lägg till Bates-nummerering – Komplett C#-guide](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Lär dig hur du verifierar PDF-signaturer och lägger till Bates-nummerering med Aspose.PDF för .NET i C#. + ## Ytterligare resurser - [Aspose.PDF för nätdokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/swedish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/swedish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..5fb725b01 --- /dev/null +++ b/pdf/swedish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-02 +description: Lär dig hur du extraherar signaturer, lägger till fält, lägger till en + tom PDF-sida, hur du lägger till en widget och bevarar transparens i PDF med Aspose.Pdf + i C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: sv +og_description: Hur man extraherar signaturer från en PDF och utför relaterade uppgifter + som att lägga till fält, tomma sidor, widgets och bevara transparens med Aspose.Pdf. +og_title: Hur man extraherar signaturer från PDF – Aspose C#‑guide +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Hur man extraherar signaturer från PDF – Aspose C#‑guide +url: /sv/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hur man extraherar signaturer från PDF – Aspose C#-guide + +**How to extract signatures from a PDF** är ett vanligt krav när du automatiserar kontraktshantering, fakturagodkännanden eller någon arbetsflöde som förlitar sig på digitala signaturer. +I den här guiden går vi också igenom **how to add field**, **add blank page PDF**, **how to add widget**, och **preserve transparency PDF** med Aspose.Pdf-biblioteket för .NET. + +Föreställ dig att du får dussintals signerade PDF-filer varje natt; att manuellt öppna varje fil för att verifiera signaturer skulle vara en mardröm. Med några rader C#-kod kan du programatiskt hämta signaturnamnen, behålla dina ursprungliga grafik intakta och till och med berika dokumentet med nya formulärfält – utan att förstöra befintlig transparens eller färgprofiler. + +> **What you’ll get:** ett komplett, körbart exempel som konverterar en PDF till PDF/X‑4 (bevarar transparens), extraherar varje inbäddad signaturnamn, lägger till en tom sida och skapar ett textrutefält som visas på två ställen på samma sida. + +## Förutsättningar + +- .NET 6.0 eller senare (koden fungerar även med .NET Framework) +- Aspose.Pdf for .NET **v25.2** eller nyare (krävs för `GetSignatureNames()`) +- Ett Visual Studio-projekt eller någon C#-IDE +- Tre exempel‑PDF‑filer i en mapp du kontrollerar: + - `source.pdf` – vilken PDF du vill konvertera samtidigt som du behåller transparens + - `signed.pdf` – en PDF som redan innehåller digitala signaturer + - (valfritt) en tom mapp för utdatafilerna + +> **Pro tip:** Om du ännu inte har en licensierad kopia kan du begära en gratis tillfällig licens från Asposes webbplats. Gratisläget fungerar för testning men lägger till ett vattenstämpel. + +## Steg 1 – Bevara transparens i PDF genom att konvertera till PDF/X‑4 + +Transparens och inbäddade färgprofiler går ofta förlorade när du plattar till en PDF. Att konvertera till **PDF/X‑4** behåller dessa visuella element intakta, vilket är avgörande för utskriftsklara dokument. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Varför detta är viktigt:** +PDF/X‑4 är ISO‑standarden för grafik‑utbytes‑PDF‑filer som behåller levande transparens. Genom att använda `PdfFormatConversionOptions` undviker du den vanliga fallgroparna med att rasterisera transparenta objekt, vilket kan öka filstorleken dramatiskt och försämra kvaliteten. + +## Steg 2 – Hur man extraherar signaturer från en PDF + +Aspose introducerade `GetSignatureNames()` i version 25.2, vilket gör signaturutdragning till en enradare. Metoden returnerar en array med de logiska namn som tilldelats varje digitalt signaturfält. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**Vad du kan förvänta dig:** +Om `signed.pdf` innehåller två signaturer med namnen *ManagerSig* och *ClientSig* kommer konsolen att skriva ut: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Hantering av kantfall:** +- Om PDF‑filen saknar signaturer returnerar `GetSignatureNames()` en tom array – inget undantag kastas. +- För PDF‑filer med korrupta signaturfält kan du omsluta anropet i en `try/catch` och logga felet utan att avbryta hela processen. + +## Steg 3 – Lägg till tom PDF-sida och skapa en textruta med flera widgetar + +Att lägga till en ny sida är enkelt, men **how to add field** och **how to add widget** tillsammans kräver lite nyans. En *widget* är den visuella representationen av ett formulärfält; du kan fästa flera widgetar till samma logiska fält, vilket gör att samma data kan visas på flera platser. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Varför använda flera widgetar?** +Anta att du behöver samma kommentar att visas både på framsidan och baksidan av ett kontrakt. Genom att fästa två widgetar till samma fält uppdateras automatiskt den andra när användaren gör en ändring på den ena platsen. + +**Vanliga fallgropar:** +- Om du glömmer att lägga till fältet i `newDoc.Form` blir widgeten osynlig i PDF‑visare. +- Att använda identiska rektangelkoordinater för båda widgetarna kommer att stapla dem ovanpå varandra – se till att `Rectangle`‑värdena skiljer sig. + +## Steg 4 – Sätt ihop allt: ett komplett, körbart exempel + +Nedan är ett enda program som kör varje steg i den presenterade ordningen. Kopiera och klistra in det i ett nytt konsolprojekt, justera sökvägarna och kör. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Förväntad utdata + +När du kör programmet bör du se något liknande: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Öppna `TextBoxMultipleWidgets.pdf` i Adobe Acrobat Reader; du kommer att märka två identiska textrutor märkta **Comments** — en nära toppen, en lite längre ner. Att skriva i den ena uppdaterar den andra omedelbart. + +## Vanliga frågor (FAQ) + +| Fråga | Svar | +|----------|--------| +| **Kan jag extrahera de faktiska signaturbytena?** | `GetSignatureNames()` returnerar endast logiska namn. För att hämta certifikatet eller signaturvärdet behöver du `SignatureField`‑objekt (`document.Form["fieldName"] as SignatureField`). | +| **Fungerar PDF/X‑4‑konvertering på krypterade PDF‑filer?** | Ja, så länge du anger lösenordet via `Document.Open(file, password)`. | +| **Vad händer om jag behöver fler än två widgetar?** | Anropa helt enkelt `textBox.Widgets.Add()` för varje ytterligare `WidgetAnnotation`. | +| **Kommer den tomma sidan att ärva sidstorlek från den ursprungliga PDF‑filen?** | Den nya sidan använder standardstorleken (A4). Du kan skicka ett `Page`‑objekt med anpassade dimensioner om så behövs. | +| **Är koden kompatibel med .NET Core?** | Absolut—Aspose.Pdf är plattformsoberoende. Referera bara NuGet‑paketet i ditt .NET Core‑projekt. | + +## Slutsats + +I den här handledningen demonstrerade vi **how to extract signatures from PDF**‑filer, samtidigt som vi täckte **how to add field**, **add blank page PDF**, **how to add widget**, och **preserve transparency PDF** med Aspose.Pdf för C#. Du har nu en solid, end‑to‑end‑lösning som du kan infoga i vilken dokument‑behandlingspipeline som helst. + +Redo för nästa utmaning? Prova att kombinera dessa tekniker med Asposes OCR‑modul för att läsa text från skannade + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/swedish/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..5d4054ea3 --- /dev/null +++ b/pdf/swedish/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,223 @@ +--- +category: general +date: 2026-04-02 +description: Verifiera PDF‑signatur snabbt och lär dig hur du lägger till Bates‑nummerering + med Aspose.Pdf. Inkluderar steg‑för‑steg‑kod och tips. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: sv +og_description: Verifiera PDF‑signatur snabbt och lär dig hur du lägger till Bates‑nummerering + med Aspose.Pdf. Följ hela exemplet och undvik vanliga fallgropar. +og_title: Verifiera PDF‑signatur och lägg till Bates‑nummerering – komplett C#‑guide +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: Verifiera PDF‑signatur och lägg till Bates‑nummerering – komplett C#‑guide +url: /sv/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Verifiera PDF-signatur och lägg till Bates-numrering – Komplett C#-guide + +Har du någonsin behövt **verify PDF signature** innan du skickar ett kontrakt, men var osäker på vilket API-anrop du ska använda? Du är inte ensam—många utvecklare stöter på detta när de hanterar juridiskt bindande PDF-filer. I den här handledningen går vi igenom exakt hur du **verify PDF signature** med Aspose.Pdf och visar sedan **how to add bates numbering** så att dina filer är redo för revision. + +Vi kommer också att beröra **how to verify signature** programatiskt, gå igenom **how to add bates** i ett enda steg, och förklara **check pdf signature**-resultaten så att du kan lita på utdata. I slutet har du en körbar C#-konsolapp som utför båda uppgifterna—ingen gåta, bara tydlig kod. + +--- + +## Vad du behöver + +- **.NET 6.0** eller senare (exemplet fungerar även med .NET Framework 4.7+) +- **Aspose.Pdf for .NET** NuGet-paket (version 23.11 eller nyare) +- En signerad PDF-fil (`signed.pdf`) som du vill validera +- En vanlig PDF (`input.pdf`) som ska få Bates-nummer + +Om du har det, är du redo att köra. Inga extra SDK:er, inga dolda konfigurationsfiler. + +--- + +## Steg 1: Ställ in projektet + +Starta med att skapa ett konsolprojekt: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Öppna `Program.cs` och rensa standardkoden. Vi bygger allt från grunden så att du kan kopiera‑klistra in den färdiga versionen senare. + +--- + +## Steg 2: Verifiera PDF-signatur + +### Varför verifiering är viktigt + +En digital signatur kan vara **compromised** om det underliggande certifikatet har återkallats eller dokumentet har manipulerats efter signering. Aspose.Pdf ger oss en praktisk `IsSignatureCompromised`-metod som returnerar en boolean—enkel, men ändå kraftfull nog för de flesta revisionsflöden. + +### Kodexempel + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Förklaring** + +- `Document` laddar PDF-filen i minnet. +- `PdfFileSignature` omsluter dokumentet och exponerar signaturrelaterade metoder. +- `IsSignatureCompromised("Signature1")` kontrollerar integriteten för signaturen med namnet *Signature1*. +- Det booleska resultatet visar om signaturen fortfarande är pålitlig. + +> **Pro tip:** Om du inte är säker på signaturfältets namn, anropa `pdfSignature.GetSignatureNames()` först; den returnerar en lista med alla signaturidentifierare. + +--- + +## Steg 3: Förbered Bates-nummereringsalternativ + +### Vad är Bates-numrering? + +Bates-nummer är sekventiella identifierare som skrivs ut på varje sida i ett juridiskt eller forensiskt dokument. De underlättar sidreferenser under granskning eller revisionsprocesser. Aspose.Pdf:s `BatesNumberingOptions` låter dig anpassa prefix, startnummer, antal siffror, justering och marginal—allt i ett objekt. + +### Fortsättning av kod + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Förklaring** + +- `BatesNumberingOptions` centraliserar alla formateringsval. +- `AddBatesNumbering` itererar automatiskt över varje sida—ingen manuell loop behövs. +- `Prefix` (`INV-`) och `StartNumber` (1000) skapar etiketter som `INV-01000`, `INV-01001` osv. +- Justera `BottomMargin` om du vill ha numret högre eller lägre på sidan. + +--- + +## Steg 4: Kör det kompletta exemplet + +Spara filen och kör sedan: + +```bash +dotnet run +``` + +Du bör se två konsollinjer: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Om den första raden skriver ut `True` är signaturen komprometterad—det betyder att dokumentet kan ha ändrats efter signering eller att certifikatet inte längre är giltigt. I så fall avbryt all efterföljande bearbetning. + +--- + +## Steg 5: Vanliga kantfall & hur du hanterar dem + +| Situation | Vad du bör hålla utkik efter | Föreslagen lösning | +|-----------|------------------------------|--------------------| +| **Flera signaturer** | `IsSignatureCompromised` kontrollerar bara ett fält åt gången. | Loopa genom `pdfSignature.GetSignatureNames()` och verifiera varje. | +| **Anpassat signaturfält namn** | Att använda "Signature1" kan kasta ett undantag om namnet skiljer sig. | Hämta först listan med namn, eller skicka det exakta namn du ser i Acrobat. | +| **Stora PDF-filer (100+ sidor)** | Att lägga till Bates-nummer kan vara minnesintensivt. | Använd `Document.Save` med `SaveOptions` som möjliggör streaming (`PdfSaveOptions { Compress = true }`). | +| **Icke‑latinska tecken i prefix** | Vissa teckensnitt stöder inte Unicode som standard. | Ställ in `pdfWithBates.Font` till ett Unicode‑kompatibelt teckensnitt som `Arial Unicode MS`. | +| **Behöver placera nummer till vänster** | Justeringen är hårdkodad till `Right`. | Ändra `Alignment = HorizontalAlignment.Left` i `BatesNumberingOptions`. | + +--- + +## Steg 6: Verifiera resultatet manuellt (valfritt) + +Öppna `BatesNumbered.pdf` i någon PDF-läsare: + +1. Bläddra igenom sidorna—varje sida bör visa en etikett som **INV‑01000** i nedre högra hörnet. +2. Använd Acrobats **Signature Panel** för att dubbelklicka på signaturen och bekräfta att statusen matchar konsolutdata. + +Om allt stämmer har du framgångsrikt **check pdf signature**-status och tillämpat **add bates numbering** i ett steg. + +--- + +## Vanliga frågor + +**Q: Kan jag verifiera en signatur utan att ladda hela dokumentet?** +A: Aspose.Pdf strömmar filen under huven, men du behöver fortfarande en `Document`-instans. För mycket stora filer, överväg att använda `PdfFileSignature` direkt med en filström för att minska minnesavtrycket. + +**Q: Behöver jag en licens för Aspose.Pdf?** +A: En gratis utvärdering fungerar, men den lägger till ett vattenmärke. För produktion bör du ha en riktig licens; annars kommer de genererade PDF-filerna att ha Aspose‑banner. + +**Q: Vad händer om jag bara vill lägga till Bates-nummer på ett urval av sidor?** +A: Använd `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` där arrayen listar de sidnummer du vill numrera. + +--- + +## Slutsats + +Du vet nu **how to verify PDF signature** med Aspose.Pdf, förstår vad det booleska resultatet betyder, och kan självsäkert **add bates numbering** till vilken PDF du än kontrollerar. Det fullständiga, körbara exemplet kombinerar båda uppgifterna och ger dig ett enda konsolverktyg som verifierar ett dokuments äkthet och märker det med revisionsklara identifierare. + +Nästa steg kan vara att utforska **how to verify signature** mot en betrodd rotbutik, eller experimentera med anpassade **add bates numbering**-stilar såsom diagonala stämplar eller per‑sektion prefix. Båda ämnena bygger på den grund du just har lärt dig och gör din dokument‑bearbetningspipeline ännu mer robust. + +Lycka till med kodningen, och kom ihåg—att kontrollera signaturer och numrera sidor är en barnlek när du har rätt kod på plats! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/swedish/net/printing-rendering/_index.md index e67a23795..d9450e042 100644 --- a/pdf/swedish/net/printing-rendering/_index.md +++ b/pdf/swedish/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Lär dig hur du effektivt skriver ut specifika sidor i en PDF med Aspose.PDF fö ### [Ställ in anpassad zoomfaktor i PDF-filer med Aspose.PDF för .NET - En komplett guide](./aspose-pdf-net-set-zoom-factor-pdfs/) Lär dig hur du ställer in en anpassad zoomfaktor i PDF-dokument med Aspose.PDF för .NET. Den här guiden behandlar installation, implementeringssteg och praktiska tillämpningar. +### [Hur man renderar PDF i C# – Komplett guide till PNG, HTML och Stämpling](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Lär dig hur du renderar PDF-filer till PNG, HTML och lägger till stämplar i C# med Aspose.PDF. + ## Ytterligare resurser - [Aspose.PDF för nätdokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/swedish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/swedish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..07a7aebf5 --- /dev/null +++ b/pdf/swedish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-04-02 +description: Hur man renderar PDF med Aspose.PDF i C#. Lär dig att rendera PDF till + PNG, spara PDF som HTML och lägga till automatiskt anpassade textstämplar effektivt. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: sv +og_description: Hur man renderar PDF med Aspose.PDF i C#. Den här guiden visar hur + man renderar PDF till PNG, sparar som HTML och skapar automatiskt anpassade textstämplar. +og_title: Hur man renderar PDF i C# – PNG, HTML och automatiskt anpassade stämplar +tags: +- Aspose.PDF +- C# +- PDF processing +title: Hur man renderar PDF i C# – Komplett guide till PNG, HTML och stämpling +url: /sv/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hur man renderar PDF i C# – Komplett guide till PNG, HTML & Stamping + +Har du någonsin undrat **hur man renderar PDF** i en .NET-applikation utan att förlora en enda glyf? Kanske provade du en snabb `PdfRenderer` bara för att se saknade tecken, eller så behöver du en skarp PNG för en miniatyr men resultatet ser hackigt ut. Enligt min erfarenhet är rätt kombination av renderingsalternativ och teckensnittshantering skillnaden mellan en trasig förhandsgranskning och en pixelperfekt bild. + +I den här handledningen går vi igenom tre verkliga scenarier med Aspose.PDF för .NET: rendera en PDF-sida till PNG medan vi analyserar teckensnitt, lägga till en `TextStamp` som automatiskt ändrar storlek på sitt teckensnitt, och spara en PDF som HTML med hjälp av teckensnittets CMap‑tabell. I slutet kommer du att kunna **rendera PDF till PNG**, **konvertera PDF‑sida till PNG**, **exportera PDF‑sidans bild**, och till och med **spara PDF som HTML** utan problem. + +## Förutsättningar + +- .NET 6.0 eller senare (koden fungerar även på .NET Framework 4.6+) +- Aspose.PDF för .NET NuGet‑paket (`Install-Package Aspose.PDF`) +- En PDF‑fil med komplexa teckensnitt (t.ex. `complexFonts.pdf`) för renderingsdemot +- Grundläggande kunskap om C# och Visual Studio (eller någon IDE du föredrar) + +> **Proffstips:** Om du kör på en CI‑server, se till att Aspose‑licensfilen antingen är inbäddad som en resurs eller refererad via en miljövariabel för att undvika evalueringsvattenstämplar. + +--- + +## ## Hur man renderar PDF till PNG med teckensnittsanalyser + +### Varför analysera teckensnitt? + +När en PDF innehåller anpassade eller inbäddade teckensnitt kan en naiv rendering släppa glyfer som renderaren inte kan mappa. Genom att aktivera `AnalyzeFonts` tvingas Aspose att inspektera teckensnittströmmarna och ersätta saknade glyfer, vilket garanterar en trogen bild. + +### Steg‑för‑steg‑implementation + +1. **Skapa en `PngDevice` med `AnalyzeFonts` aktiverat.** +2. **Läs in käll‑PDF‑filen** med `Document`. +3. **Bearbeta den önskade sidan** och skriv PNG‑filen till disk. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**Vad du bör se:** En fil med namnet `rendered.png` i `YOUR_DIRECTORY` som ser identisk ut med den första sidan av `complexFonts.pdf`, inklusive alla specialtecken och diakritiska tecken. + +![Renderad PDF-sida som PNG‑bild](rendered.png "Renderad PDF-sida som PNG‑bild") + +#### Vanliga fallgropar & hur man undviker dem + +- **Saknade teckensnitt på servern:** Om PDF:en refererar till teckensnitt som inte är inbäddade, placera dessa teckensnitt i applikationens sökväg eller aktivera `FontRepository` för att peka på en anpassad mapp. +- **Stora PDF‑filer:** Rendering av många sidor i en loop kan förbruka minne; frigör varje `Document`‑instans omedelbart eller använd `using`‑block som visas. + +--- + +## ## Lägga till en Auto‑Fit TextStamp (Rendera PDF med dynamisk text) + +### När skulle du behöva en dynamiskt storleksanpassad stämpel? + +Föreställ dig att du genererar fakturor och behöver lägga över ett “PAID”-vattenstämpel som passar vilken rektangel du än väljer, oavsett textlängd. Att manuellt beräkna teckensnittsstorlek är felbenäget; Asposes `AutoAdjustFontSizeToFitStampRectangle` sköter det tunga arbetet. + +### Steg‑för‑steg‑implementation + +1. **Konfigurera en `TextStamp`** med auto‑justerings‑egenskaper. +2. **Läs in mål‑PDF‑filen** som du vill stämpla. +3. **Lägg till stämpeln på en sida** och spara resultatet. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Resultat:** `stampAutoFit.pdf` innehåller texten “Important notice” perfekt anpassad till rektangeln 300 × 150 pt, oavsett den ursprungliga strängens längd. + +#### Kantfall att överväga + +- **Mycket långa strängar:** Om texten överskrider rektangeln även med den minsta teckensnittsstorleken, kommer Aspose att trunkera enligt `WordWrapMode`. Du kan förhandskontrollera längden eller öka rektangelns storlek. +- **Flera stämplar:** Återanvändning av samma `TextStamp`‑instans på olika sidor fungerar, men kom ihåg att positionsegenskaper (`Left`, `Top`) behåller sina sista värden—återställ dem vid behov. + +--- + +## ## Spara PDF som HTML med teckensnittets CMap‑tabell + +### Varför bry sig om CMap‑tabellen? + +När du konverterar en PDF till HTML är det avgörande att bevara Unicode‑mappning för sökbar text. CMap‑baserad strategi tvingar Aspose att prioritera teckensnittets interna teckenkarta, vilket ofta ger mer exakt textutvinning än en generisk kodning. + +### Steg‑för‑steg‑implementation + +1. **Skapa `HtmlSaveOptions`** med CMap‑baserad kodningsregel. +2. **Läs in käll‑PDF‑filen**. +3. **Spara som HTML** med de konfigurerade alternativen. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**Vad du får:** En mapp (om `SplitIntoPages` är true) som innehåller `cmapHtml.html` och tillhörande resurser. Öppna HTML‑filen i en webbläsare så märker du att texten är markerbar och sökbar och nästan exakt matchar den ursprungliga PDF‑filen. + +#### Tips för en ren HTML‑export + +- **Bilder vs. vektorer:** Ställ in `RasterImagesSavingMode` till `RasterImagesSavingMode.AsEmbeddedPartsOfPng` om du föredrar PNG‑filer framför JPEG för skarpare grafik. +- **Stora PDF‑filer:** Använd `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` för att hålla varje sida lättviktig. + +--- + +## ## Fullt fungerande exempel – Alla tre scenarier i ett projekt + +Nedan är en fristående konsolapp som demonstrerar de tre teknikerna sida‑vid‑sida. Kopiera och klistra in den i ett nytt C#‑konsolprojekt, lägg till Aspose.PDF NuGet‑paketet och justera filsökvägarna. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Kör programmet, och du kommer att hitta: + +- `rendered.png` – en perfekt bild av den första PDF‑sidan. +- `stampAutoFit.pdf` – den ursprungliga PDF‑filen med en dynamiskt storleksanpassad “Important notice”-stämpel. +- `cmapHtml.html` (plus sid‑specifika HTML‑filer) – en HTML‑version som bevarar den ursprungliga textkodningen. + +--- + +## ## Vanliga frågor (FAQ) + +**Q: Ökar `AnalyzeFonts` renderingstiden?** +A: Lite grann, eftersom Aspose skannar varje teckensnittström. Avvägningen är vanligtvis värd det för komplexa PDF‑filer där saknade glyfer är oacceptabla. + +**Q: Kan jag rendera flera sidor i en loop?** +A: Absolut. Iterera bara över `sourcePdf.Pages` och anropa `pngDevice.Process(page, $"page{page.Number}.png")`. Kom ihåg att frigöra varje `Document` om du öppnar dem separat. + +**Q: Vad händer om + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 7cdbff563..cf3b7c83f 100644 --- a/pdf/thai/net/conversion-export/_index.md +++ b/pdf/thai/net/conversion-export/_index.md @@ -62,7 +62,7 @@ ### [แปลง PDF เป็น EMF ด้วย Aspose.PDF สำหรับ .NET](./convert-pdf-to-emf-aspose-dotnet/) บทช่วยสอนเกี่ยวกับโค้ดสำหรับ Aspose.PDF Net -### [แปลง PDF เป็น HTML โดยใช้ Aspose.PDF สำหรับ .NET: คำแนะนำเกี่ยวกับเอาต์พุตสตรีม](./convert-pdf-html-aspose-dotnet-guide/) +### [แปลง PDF เป็น HTML โดยใช้ Aspose.PDF สำหรับ .NET: คำแนะนำเกี่ยวกับเอาต์พุตสตรีม](./convert-pdf-html-asposedotnet-guide/) เรียนรู้วิธีการแปลงไฟล์ PDF เป็น HTML ด้วย Aspose.PDF สำหรับ .NET โดยใช้เอาต์พุตสตรีม ปรับปรุงการบูรณาการและการเข้าถึงเว็บของคุณ ### [แปลง PDF เป็น HTML ใน .NET โดยใช้ Aspose.PDF โดยไม่ต้องบันทึกภาพ](./convert-pdf-html-net-asposepdf-no-images/) @@ -192,7 +192,7 @@ เรียนรู้วิธีแปลงไฟล์ PDF เป็นรูปแบบ PostScript โดยใช้ Aspose.PDF สำหรับ .NET ด้วยคู่มือทีละขั้นตอนนี้ เหมาะอย่างยิ่งสำหรับความต้องการการพิมพ์คุณภาพสูง ### [วิธีแปลง PDF เป็น TIFF โดยใช้ Aspose.PDF สำหรับ .NET: คำแนะนำทีละขั้นตอน](./convert-pdf-to-tiff-aspose-net/) -เรียนรู้วิธีแปลงไฟล์ PDF เป็นรูปภาพ TIFF คุณภาพสูงโดยใช้ Aspose.PDF สำหรับ .NET ปฏิบัติตามคำแนะนำทีละขั้นตอนของเราซึ่งมีตัวอย่างโค้ดและคำแนะนำในการกำหนดค่า +เรียนรู้วิธีแปลงไฟล์ PDF เป็นรูปภาพ TIFF คุณภาพสูงโดยใช้ Aspose.PDF สำหรับ .NET ปฏิบัติตามคำแนะนำของเราซึ่งมีตัวอย่างโค้ดและคำแนะนำในการกำหนดค่า ### [วิธีแปลง PDF เป็น XML โดยใช้ Aspose.PDF สำหรับ .NET: คำแนะนำทีละขั้นตอน](./pdf-to-xml-conversion-aspose-pdf-net/) เรียนรู้ศิลปะการแปลงเอกสาร PDF เป็น XML ด้วย Aspose.PDF สำหรับ .NET ปฏิบัติตามคำแนะนำที่ครอบคลุมนี้เพื่อปรับปรุงการจัดการเอกสารของคุณ @@ -224,6 +224,9 @@ ### [การแปลง PDF เป็น HTML ด้วย Aspose.PDF สำหรับ .NET](./pdf-to-html-conversion-aspose-dot-net/) บทช่วยสอนเกี่ยวกับโค้ดสำหรับ Aspose.PDF Net +### [แปลง PDF เป็น HTML และตรวจสอบลายเซ็น PDF – คู่มือเต็ม Aspose .NET](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +เรียนรู้วิธีแปลง PDF เป็น HTML และตรวจสอบลายเซ็น PDF อย่างละเอียดด้วย Aspose.PDF สำหรับ .NET + ### [การแปลง PDF เป็น TIFF ใน .NET โดยใช้ Aspose.PDF: คำแนะนำทีละขั้นตอน](./pdf-to-tiff-conversion-aspose-pdf-net/) เรียนรู้วิธีการแปลงเอกสาร PDF เป็นภาพ TIFF โดยใช้ Aspose.PDF สำหรับ .NET เชี่ยวชาญความลึกสีที่กำหนดเองและเทคนิคการประมวลผลภาพขั้นสูง diff --git a/pdf/thai/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/thai/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..50ba948f3 --- /dev/null +++ b/pdf/thai/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,257 @@ +--- +category: general +date: 2026-04-02 +description: แปลง PDF เป็น HTML พร้อมคงเวกเตอร์ไว้ จากนั้นตรวจสอบลายเซ็น PDF ด้วย + Aspose PDF เรียนรู้การแปลง PDF ด้วย Aspose และตรวจสอบลายเซ็นดิจิทัลของ PDF ใน C# +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: th +og_description: แปลง PDF เป็น HTML พร้อมคงเวกเตอร์และตรวจสอบลายเซ็น PDF ด้วย Aspose + PDF. โค้ด C# ทีละขั้นตอน, เคล็ดลับ, และการจัดการกรณีขอบ +og_title: แปลง PDF เป็น HTML และตรวจสอบลายเซ็น PDF – บทเรียน Aspose .NET ฉบับสมบูรณ์ +tags: +- Aspose.PDF +- C# +- PDF processing +title: แปลง PDF เป็น HTML และตรวจสอบลายเซ็น PDF – คู่มือ Aspose .NET ฉบับเต็ม +url: /th/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# แปลง PDF เป็น HTML และตรวจสอบลายเซ็น PDF – คู่มือ Aspose .NET ฉบับสมบูรณ์ + +เคยต้องการ **แปลง PDF เป็น HTML** แต่กังวลว่าจะสูญเสียคุณภาพเวกเตอร์หรือทำลายลายเซ็นดิจิทัลหรือไม่? คุณไม่ได้เป็นคนเดียว นักพัฒนาหลายคนเจออุปสรรคเมื่อ PDF มีเพียงกราฟิกเวกเตอร์หรือมีลายเซ็นดิจิทัลแบบ SHA‑3—เครื่องแปลงมาตรฐานจะทำการแรสเตอร์ทั้งหมดหรือเพิกเฉยต่อลายเซ็นโดยสิ้นเชิง. + +ในคู่มือนี้เราจะพาคุณผ่านโซลูชันเชิงปฏิบัติการโดยใช้ **Aspose.Pdf** สำหรับ .NET: ขั้นแรกเราจะลบภาพแรสเตอร์ออกขณะแปลง PDF ที่มีเฉพาะเวกเตอร์ให้เป็น HTML ที่สะอาด แล้วเราจะแสดงวิธี **ตรวจสอบลายเซ็น PDF** (ใช่, ลายเซ็น SHA‑3‑256) และแสดงผลในคอนโซล. เมื่อจบคุณจะมีโปรแกรม C# พร้อมรันที่ทำทั้งสองงาน พร้อมเคล็ดลับหลากหลายเพื่อหลีกเลี่ยงข้อผิดพลาดทั่วไป. + +## สิ่งที่คุณต้องการ + +- **Aspose.Pdf for .NET** (เวอร์ชันล่าสุด ณ วันที่ 2026‑04, เช่น 23.12). +- สภาพแวดล้อมการพัฒนา .NET (Visual Studio 2022 หรือ VS Code พร้อมส่วนขยาย C#). +- ตัวอย่าง PDF สองไฟล์: + 1. `vectorOnly.pdf` – มีเฉพาะเวกเตอร์และข้อความ, ไม่มีภาพแรสเตอร์. + 2. `signed_sha3.pdf` – มีลายเซ็นดิจิทัลด้วยแฮช SHA‑3‑256. + +- ไม่ต้องใช้แพ็กเกจ NuGet เพิ่มเติมนอกจาก `Aspose.Pdf`. + +--- + +## ขั้นตอนที่ 1: ตั้งค่าโปรเจกต์และโหลด PDF + +สร้างแอปคอนโซลใหม่, เพิ่ม NuGet ของ Aspose.Pdf, และนำเนมสเปซเข้ามาใช้. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Why this matters*: การโหลดเอกสารล่วงหน้าช่วยให้เราสามารถใช้วัตถุเดียวกันสำหรับการแปลงและการตรวจสอบลายเซ็น, ลดการใช้หน่วยความจำ. + +--- + +## ขั้นตอนที่ 2: แปลง PDF เป็น HTML โดยข้ามภาพแรสเตอร์ + +`HtmlSaveOptions` ของ Aspose.Pdf ให้การควบคุมระดับละเอียดเกี่ยวกับการจัดการภาพ. การตั้งค่า `RasterImagesSavingMode` เป็น `Skip` บอกไลบรารีให้ละเลยภาพแรสเตอร์ทั้งหมด—เหมาะอย่างยิ่งสำหรับแหล่งที่มาที่มีเฉพาะเวกเตอร์. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**ผลลัพธ์ที่คาดหวัง**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Pro tip*: หากคุณต้องการฝัง HTML ลงในหน้าเว็บในภายหลัง, ไฟล์ที่สร้างจะมีเฉพาะ SVG และ CSS—ไม่มีบล็อบ PNG/JPEG ขนาดใหญ่. + +--- + +## ขั้นตอนที่ 3: เตรียมตัวจัดการลายเซ็น + +คลาส `PdfFileSignature` ของ Aspose.Pdf เป็นจุดเริ่มต้นสำหรับงานลายเซ็นดิจิทัลใด ๆ. มันอ่านพจนานุกรมลายเซ็น, ดึงชื่อออก, และให้คุณตรวจสอบโดยใช้อัลกอริทึมแฮชที่ระบุ. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Why this step is crucial*: หากไม่มีตัวจัดการนี้คุณไม่สามารถแสดงรายการลายเซ็นหรือเลือกอัลกอริทึมแฮชที่ต้องการ (เช่น SHA‑3‑256) ได้. + +--- + +## ขั้นตอนที่ 4: แสดงรายการและตรวจสอบลายเซ็นแต่ละอันโดยใช้ SHA‑3‑256 + +เมธอด `GetSignNames()` จะคืนค่าป้ายลายเซ็นทั้งหมดใน PDF. วนลูปผ่านแต่ละชื่อ, เรียก `VerifySignature` พร้อม `DigestHashAlgorithm.Sha3_256`, แล้วพิมพ์ผลลัพธ์. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**ตัวอย่างผลลัพธ์คอนโซล**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Edge case*: หากลายเซ็นใช้แฮชอื่น (เช่น SHA‑256) การตรวจสอบจะคืนค่า `False`. คุณสามารถเพิ่มการตรวจสอบสำรองโดยลองค่า `DigestHashAlgorithm` อื่น ๆ ภายในลูปได้. + +--- + +## ขั้นตอนที่ 5: ตัวอย่างการทำงานเต็มรูปแบบ (โค้ดทั้งหมดในที่เดียว) + +ด้านล่างเป็นโปรแกรมสมบูรณ์ที่คุณสามารถคัดลอก‑วางลงใน `Program.cs`. แทนที่ `YOUR_DIRECTORY` ด้วยโฟลเดอร์จริงที่เก็บ PDF ของคุณ. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +เรียกใช้โปรแกรม (`dotnet run` หรือกด **F5** ใน Visual Studio). คุณควรเห็นข้อความยืนยันการแปลงตามด้วยผลลัพธ์การตรวจสอบลายเซ็น. + +--- + +## คำถามที่พบบ่อย & วิธีจัดการ + +| Question | Answer | +|----------|--------| +| **Will the HTML still contain the original fonts?** | Aspose.Pdf embeds the used fonts as base‑64 data URIs by default, so the output renders correctly even if the host machine lacks those fonts. | +| **What if my PDF has both vectors *and* images?** | Keep `RasterImagesSavingMode = Skip` to drop images, or switch to `EmbedAll` if you need them. The option is per‑conversion, so you can run two passes if you need both versions. | +| **My signature uses SHA‑512—how do I verify it?** | Replace `DigestHashAlgorithm.Sha3_256` with `DigestHashAlgorithm.Sha512`. You can even detect the algorithm from the signature dictionary and choose dynamically. | +| **Is there a way to get the signer’s certificate details?** | Yes. After verification, call `signatureHandler.GetSignatureInfo(signName).Certificate` to retrieve the X.509 certificate and inspect fields like `Subject` and `Issuer`. | +| **What if the PDF is password‑protected?** | Load it with `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. The rest of the workflow stays the same. | + +--- + +## เคล็ดลับสำหรับโค้ดพร้อมใช้งานใน Production + +1. **Dispose PDFs Properly** – Wrap `PdfDocument` instances in a `using` block or call `Dispose()` to free native resources. +2. **Batch Processing** – If you have dozens of PDFs, iterate over a directory, store results in a CSV, and parallelize the conversion with `Parallel.ForEach`. +3. **Logging** – Replace `Console.WriteLine` with a structured logger (Serilog, NLog) for better traceability, especially when verifying many signatures. +4. **Error Handling** – Catch `Aspose.Pdf.Exceptions` to handle corrupt files gracefully: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Version Compatibility** – Aspose.Pdf evolves quickly. Always test with the exact version referenced in your `csproj`. The API shown works for 23.x and later. + +--- + +## สรุป + +เราเพิ่ง **แปลง PDF เป็น HTML** โดยคงไว้เฉพาะเวกเตอร์และข้อความ, และเรา **ตรวจสอบลายเซ็น PDF** ด้วยอัลกอริทึม SHA‑3‑256—all ด้วยเพียงไม่กี่บรรทัดของ C#. สิ่งที่ควรจำคือ: + +- ใช้ `HtmlSaveOptions.RasterImagesSavingMode = Skip` เพื่อให้ได้ HTML ที่สะอาดและมีเฉพาะเวกเตอร์. +- ใช้ `PdfFileSignature` และ `DigestHashAlgorithm.Sha3_256` เพื่อ **ตรวจสอบลายเซ็นดิจิทัลของ PDF** อย่างเชื่อถือได้. + +จากนี้คุณสามารถสำรวจหัวข้อที่เกี่ยวข้องเช่น **aspose pdf conversion** ของ PDF ไปเป็น PNG, การดึงไฟล์ที่ฝังอยู่, หรือการสร้างเว็บเซอร์วิสที่รับ PDF แล้วคืน HTML ที่ตรวจสอบแล้ว. + +ลองทำดู, ปรับแต่งตัวเลือกต่าง ๆ, แล้วบอกเราว่าคุณค้นพบอะไรบ้าง. Happy coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/thai/net/digital-signatures/_index.md b/pdf/thai/net/digital-signatures/_index.md index 18d6010ae..0f22a282d 100644 --- a/pdf/thai/net/digital-signatures/_index.md +++ b/pdf/thai/net/digital-signatures/_index.md @@ -26,6 +26,9 @@ ### [ดึงข้อมูลลายเซ็นดิจิทัลจากไฟล์ PDF ด้วย Aspose.PDF](./extract-digital-signature-info-from-pdfs-aspose-pdf/) บทช่วยสอนเกี่ยวกับโค้ดสำหรับ Aspose.PDF Net +### [วิธีดึงลายเซ็นจาก PDF – คู่มือ Aspose C#](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +เรียนรู้วิธีดึงลายเซ็นจากไฟล์ PDF ด้วย Aspose.PDF สำหรับ .NET ด้วย C# + ### [วิธีการเปลี่ยนภาษาลายเซ็น PDF ด้วย Aspose.PDF สำหรับ .NET](./change-pdf-signature-language-aspose-net/) เรียนรู้วิธีปรับแต่งข้อความลายเซ็นดิจิทัลใน PDF โดยใช้ Aspose.PDF สำหรับ .NET เหมาะอย่างยิ่งสำหรับการเตรียมเอกสารและการแปลหลายภาษา @@ -58,12 +61,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 และเพิ่มหมายเลข Bates – คู่มือ C# ฉบับสมบูรณ์](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +เรียนรู้วิธีตรวจสอบลายเซ็น PDF พร้อมเพิ่มหมายเลข Bates ด้วย C# อย่างละเอียดและครบถ้วน + ## แหล่งข้อมูลเพิ่มเติม - [Aspose.PDF สำหรับเอกสารประกอบ Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/thai/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/thai/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..6ad24b413 --- /dev/null +++ b/pdf/thai/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,249 @@ +--- +category: general +date: 2026-04-02 +description: เรียนรู้วิธีการดึงลายเซ็น, เพิ่มฟิลด์, เพิ่มหน้าเปล่าใน PDF, วิธีเพิ่มวิดเจ็ต, + และรักษาความโปร่งใสของ PDF ด้วย Aspose.Pdf ใน C# +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: th +og_description: วิธีดึงลายเซ็นจากไฟล์ PDF และทำงานที่เกี่ยวข้อง เช่น การเพิ่มฟิลด์ + หน้าเปล่า วิดเจ็ต และการรักษาความโปร่งใสโดยใช้ Aspose.Pdf. +og_title: วิธีดึงลายเซ็นจาก PDF – คู่มือ Aspose C# +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: วิธีดึงลายเซ็นจาก PDF – คู่มือ Aspose C# +url: /th/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีดึงลายเซ็นจาก PDF – คู่มือ Aspose C# + +**How to extract signatures from a PDF** เป็นความต้องการที่พบบ่อยเมื่อคุณทำการอัตโนมัติการประมวลผลสัญญา การอนุมัติใบแจ้งหนี้ หรือกระบวนการทำงานใด ๆ ที่พึ่งพาลายเซ็นดิจิทัล +ในคู่มือนี้เราจะอธิบายเพิ่มเติมเกี่ยวกับ **how to add field**, **add blank page PDF**, **how to add widget**, และ **preserve transparency PDF** โดยใช้ไลบรารี Aspose.Pdf สำหรับ .NET + +ลองนึกภาพว่าคุณได้รับ PDF ที่มีลายเซ็นหลายสิบไฟล์ทุกคืน; การเปิดไฟล์แต่ละไฟล์เพื่อยืนยันลายเซ็นด้วยตนเองจะเป็นเรื่องน่าอับอาย ด้วยเพียงไม่กี่บรรทัดของโค้ด C# คุณสามารถดึงชื่อลายเซ็นได้โดยอัตโนมัติ รักษากราฟิกต้นฉบับไว้ครบถ้วน และแม้กระทั่งเพิ่มฟิลด์ฟอร์มใหม่ลงในเอกสาร—ทั้งหมดนี้โดยไม่ทำลายความโปร่งใสหรือโปรไฟล์สีที่มีอยู่ + +> **What you’ll get:** ตัวอย่างที่สมบูรณ์และสามารถรันได้ ซึ่งจะแปลง PDF เป็น PDF/X‑4 (รักษา transparency), ดึงชื่อลายเซ็นที่ฝังอยู่ทั้งหมด, เพิ่มหน้าเปล่า, และสร้างฟิลด์ฟอร์ม textbox ที่ปรากฏในสองตำแหน่งบนหน้าเดียวกัน + +## ข้อกำหนดเบื้องต้น + +- .NET 6.0 หรือใหม่กว่า (โค้ดทำงานได้กับ .NET Framework ด้วย) +- Aspose.Pdf for .NET **v25.2** หรือใหม่กว่า (จำเป็นสำหรับ `GetSignatureNames()`) +- โครงการ Visual Studio หรือ IDE C# ใด ๆ +- ตัวอย่าง PDF สามไฟล์ในโฟลเดอร์ที่คุณควบคุม: + - `source.pdf` – PDF ใด ๆ ที่คุณต้องการแปลงโดยคงความโปร่งใสไว้ + - `signed.pdf` – PDF ที่มีลายเซ็นดิจิทัลอยู่แล้ว + - (optional) โฟลเดอร์ว่างสำหรับไฟล์ผลลัพธ์ + +> **Pro tip:** หากคุณยังไม่มีสำเนาที่มีลิขสิทธิ์ คุณสามารถขอรับไลเซนส์ชั่วคราวฟรีจากเว็บไซต์ของ Aspose โหมดฟรีทำงานสำหรับการทดสอบแต่จะมีลายน้ำ + +## ขั้นตอนที่ 1 – รักษา Transparency PDF โดยแปลงเป็น PDF/X‑4 + +Transparency และโปรไฟล์สีที่ฝังอยู่มักจะหายไปเมื่อคุณทำการ flatten PDF การแปลงเป็น **PDF/X‑4** จะคงส่วนประกอบภาพเหล่านี้ไว้ ซึ่งสำคัญมากสำหรับเอกสารที่พร้อมพิมพ์ + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Why this matters:** +PDF/X‑4 เป็นมาตรฐาน ISO สำหรับ PDF ที่แลกเปลี่ยนกราฟิกและคงความโปร่งใสแบบสดโดยใช้ `PdfFormatConversionOptions` คุณจะหลีกเลี่ยงข้อผิดพลาดทั่วไปที่ทำให้วัตถุโปร่งใสถูกแปลงเป็น raster ซึ่งอาจทำให้ไฟล์ใหญ่ขึ้นอย่างมากและคุณภาพลดลง + +## ขั้นตอนที่ 2 – วิธีดึงลายเซ็นจาก PDF + +Aspose แนะนำ `GetSignatureNames()` ในเวอร์ชัน 25.2 ทำให้การดึงลายเซ็นเป็นเพียงบรรทัดเดียว วิธีนี้จะคืนค่าอาเรย์ของชื่อเชิงตรรกะที่กำหนดให้กับแต่ละฟิลด์ลายเซ็นดิจิทัล + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**What to expect:** หาก `signed.pdf` มีลายเซ็นสองอันชื่อ *ManagerSig* และ *ClientSig* คอนโซลจะพิมพ์: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Edge case handling:** +- หาก PDF ไม่มีลายเซ็น `GetSignatureNames()` จะคืนค่าอาเรย์ว่าง – ไม่เกิดข้อยกเว้น +- สำหรับ PDF ที่ฟิลด์ลายเซ็นเสียหาย คุณสามารถห่อการเรียกใน `try/catch` แล้วบันทึกข้อผิดพลาดโดยไม่หยุดกระบวนการทั้งหมด + +## ขั้นตอนที่ 3 – เพิ่มหน้า PDF ว่างและสร้าง TextBox พร้อมหลาย Widget + +การเพิ่มหน้าต่างใหม่ทำได้ง่าย แต่ **how to add field** และ **how to add widget** ร่วมกันต้องใช้ความละเอียด Widget คือการแสดงผลของฟิลด์ฟอร์ม; คุณสามารถแนบหลาย widget ไปยังฟิลด์เชิงตรรกะเดียวกัน ทำให้ข้อมูลเดียวกันปรากฏในหลายตำแหน่ง + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Why use multiple widgets?** +สมมติว่าคุณต้องการให้คอมเมนต์เดียวกันแสดงทั้งด้านหน้าและด้านหลังของสัญญา โดยการแนบ widget สองตัวให้กับฟิลด์เดียวกัน การเปลี่ยนแปลงใด ๆ ที่ผู้ใช้ทำในตำแหน่งหนึ่งจะอัปเดตอีกตำแหน่งโดยอัตโนมัติ + +**Common pitfalls:** +- ลืมเพิ่มฟิลด์ลงใน `newDoc.Form` จะทำให้ widget ไม่แสดงในโปรแกรมอ่าน PDF +- ใช้พิกัดสี่เหลี่ยมเดียวกันสำหรับ widget ทั้งสองจะทำให้ซ้อนกันบนหน้าเดียว – ตรวจสอบให้ค่า `Rectangle` แตกต่างกัน + +## ขั้นตอนที่ 4 – รวมทุกอย่างเข้าด้วยกัน: ตัวอย่างเต็มที่สามารถรันได้ + +ด้านล่างเป็นโปรแกรมเดียวที่ดำเนินการทุกขั้นตอนตามลำดับที่อธิบายไว้ คัดลอก‑วางลงในโครงการคอนโซลใหม่ ปรับเส้นทางไฟล์ แล้วรัน + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### ผลลัพธ์ที่คาดหวัง + +เมื่อคุณรันโปรแกรมควรเห็นผลลัพธ์คล้ายกับนี้: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +เปิด `TextBoxMultipleWidgets.pdf` ด้วย Adobe Acrobat Reader; คุณจะเห็นกล่องข้อความสองกล่องที่มีป้าย **Comments** เหมือนกัน—หนึ่งอยู่ใกล้ด้านบน อีกหนึ่งอยู่ต่ำกว่านิดหน่อย การพิมพ์ในกล่องหนึ่งจะอัปเดตอีกกล่องทันที + +## คำถามที่พบบ่อย (FAQ) + +| Question | Answer | +|----------|--------| +| **Can I extract the actual signature bytes?** | `GetSignatureNames()` only returns logical names. To pull the certificate or signature value you need `SignatureField` objects (`document.Form["fieldName"] as SignatureField`). | +| **Does PDF/X‑4 conversion work on encrypted PDFs?** | Yes, as long as you supply the password via `Document.Open(file, password)`. | +| **What if I need more than two widgets?** | Just call `textBox.Widgets.Add()` for each additional `WidgetAnnotation`. | +| **Will the blank page inherit page size from the original PDF?** | The new page uses the default size (A4). You can pass a `Page` object with custom dimensions if needed. | +| **Is the code compatible with .NET Core?** | Absolutely—Aspose.Pdf is cross‑platform. Just reference the NuGet package in your .NET Core project. | + +## สรุป + +ในบทแนะนำนี้เราได้สาธิต **how to extract signatures from PDF** พร้อมกับครอบคลุม **how to add field**, **add blank page PDF**, **how to add widget**, และ **preserve transparency PDF** ด้วย Aspose.Pdf สำหรับ C# ตอนนี้คุณมีโซลูชันครบวงจรที่สามารถนำไปใช้ในสายงานการประมวลผลเอกสารใด ๆ ได้ + +พร้อมรับความท้าทายต่อไปหรือยัง? ลองผสานเทคนิคเหล่านี้กับโมดูล OCR ของ Aspose เพื่ออ่านข้อความจากสแกน + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/thai/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..64da0e424 --- /dev/null +++ b/pdf/thai/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,223 @@ +--- +category: general +date: 2026-04-02 +description: ตรวจสอบลายเซ็น PDF อย่างรวดเร็วและเรียนรู้วิธีเพิ่มหมายเลขบาเตสด้วย Aspose.Pdf + รวมโค้ดและเคล็ดลับแบบขั้นตอนต่อขั้นตอน +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: th +og_description: ตรวจสอบลายเซ็น PDF อย่างรวดเร็วและเรียนรู้วิธีเพิ่มหมายเลขบาเตสด้วย + Aspose.Pdf ทำตามตัวอย่างเต็มรูปแบบและหลีกเลี่ยงข้อผิดพลาดทั่วไป. +og_title: ตรวจสอบลายเซ็น PDF และเพิ่มหมายเลข Bates – คู่มือ C# ฉบับสมบูรณ์ +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: ตรวจสอบลายเซ็น PDF และเพิ่มหมายเลข Bates – คู่มือ C# ฉบับสมบูรณ์ +url: /th/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# ตรวจสอบลายเซ็น PDF และเพิ่มหมายเลข Bates – คู่มือ C# ฉบับสมบูรณ์ + +เคยต้องการ **verify PDF signature** ก่อนส่งสัญญา แต่ไม่แน่ใจว่าจะใช้ API call ใด? คุณไม่ได้เป็นคนเดียว—นักพัฒนาหลายคนเจอปัญหาเดียวกันเมื่อจัดการกับ PDF ที่มีผลผูกพันทางกฎหมาย ในบทเรียนนี้เราจะอธิบายขั้นตอนการ **verify PDF signature** ด้วย Aspose.Pdf แล้วแสดงให้คุณเห็น **how to add bates numbering** เพื่อให้ไฟล์ของคุณพร้อมสำหรับการตรวจสอบ + +เราจะพูดถึง **how to verify signature** แบบโปรแกรม, ครอบคลุม **how to add bates** ในหนึ่งขั้นตอน, และอธิบายผลลัพธ์ของ **check pdf signature** เพื่อให้คุณเชื่อถือผลลัพธ์ เมื่อเสร็จคุณจะมีแอปคอนโซล C# ที่ทำงานได้ทั้งสองงาน—ไม่มีความลับ เพียงโค้ดที่ชัดเจน + +--- + +## สิ่งที่คุณต้องมี + +- **.NET 6.0** หรือเวอร์ชันใหม่กว่า (ตัวอย่างทำงานกับ .NET Framework 4.7+ ด้วย) +- **Aspose.Pdf for .NET** NuGet package (เวอร์ชัน 23.11 หรือใหม่กว่า) +- ไฟล์ PDF ที่มีลายเซ็น (`signed.pdf`) ที่คุณต้องการตรวจสอบ +- PDF ธรรมดา (`input.pdf`) ที่จะรับหมายเลข Bates + +หากคุณมีทั้งหมดนี้ คุณพร้อมเริ่มแล้ว ไม่ต้องมี SDK เพิ่มเติม ไม่ต้องมีไฟล์ config ที่ซ่อนอยู่ + +--- + +## ขั้นตอนที่ 1: ตั้งค่าโปรเจกต์ + +Start by creating a console project: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +เปิดไฟล์ `Program.cs` แล้วลบโค้ดเริ่มต้นออก เราจะสร้างทุกอย่างตั้งแต่ต้นเพื่อให้คุณสามารถคัดลอก‑วางเวอร์ชันสุดท้ายได้ในภายหลัง + +--- + +## ขั้นตอนที่ 2: ตรวจสอบลายเซ็น PDF + +### ทำไมการตรวจสอบจึงสำคัญ + +ลายเซ็นดิจิทัลอาจ **compromised** หากใบรับรองที่อยู่เบื้องหลังถูกเพิกถอนหรือเอกสารถูกแก้ไขหลังจากลงลายเซ็น Aspose.Pdf มีเมธอด `IsSignatureCompromised` ที่สะดวกซึ่งคืนค่าเป็นบูลีน—ง่ายแต่ทรงพลังพอสำหรับสายงานตรวจสอบส่วนใหญ่ + +### ตัวอย่างโค้ด + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**คำอธิบาย** + +- `Document` โหลด PDF เข้าสู่หน่วยความจำ. +- `PdfFileSignature` ห่อเอกสารและเปิดเผยเมธอดที่เกี่ยวกับลายเซ็น. +- `IsSignatureCompromised("Signature1")` ตรวจสอบความสมบูรณ์ของลายเซ็นที่ชื่อ *Signature1*. +- ผลลัพธ์แบบบูลีนบอกว่าลายเซ็นยังคงน่าเชื่อถือหรือไม่. + +> **เคล็ดลับ:** หากคุณไม่แน่ใจชื่อฟิลด์ลายเซ็น ให้เรียก `pdfSignature.GetSignatureNames()` ก่อน; มันจะคืนรายการของตัวระบุลายเซ็นทั้งหมด + +--- + +## ขั้นตอนที่ 3: เตรียมตัวเลือกการใส่หมายเลข Bates + +### Bates numbering คืออะไร? + +หมายเลข Bates คือรหัสลำดับที่พิมพ์บนแต่ละหน้าของเอกสารทางกฎหมายหรือฟอเรนซ ทำให้การอ้างอิงหน้าต่างๆ ง่ายขึ้นในกระบวนการค้นหาเอกสารหรือการตรวจสอบ Aspose.Pdf `BatesNumberingOptions` ให้คุณปรับแต่งคำนำหน้า, หมายเลขเริ่มต้น, จำนวนหลัก, การจัดแนว, และระยะขอบ—ทั้งหมดในอ็อบเจ็กต์เดียว + +### โค้ดต่อเนื่อง + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**คำอธิบาย** + +- `BatesNumberingOptions` รวมศูนย์การตั้งค่าการจัดรูปแบบทั้งหมด. +- `AddBatesNumbering` วนลูปแต่ละหน้าโดยอัตโนมัติ—ไม่ต้องเขียนลูปด้วยตนเอง. +- `Prefix` (`INV-`) และ `StartNumber` (1000) จะสร้างป้ายเช่น `INV-01000`, `INV-01001`, เป็นต้น. +- ปรับ `BottomMargin` หากต้องการให้หมายเลขอยู่สูงหรือต่ำกว่าบนหน้า. + +--- + +## ขั้นตอนที่ 4: รันตัวอย่างเต็ม + +Save the file, then execute: + +```bash +dotnet run +``` + +คุณควรเห็นสองบรรทัดในคอนโซล: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +หากบรรทัดแรกพิมพ์ `True` หมายความว่าลายเซ็นถูก compromised—เอกสารอาจถูกแก้ไขหลังจากลงลายเซ็นหรือใบรับรองไม่เป็นที่ใช้งานอีกต่อไป ในกรณีนั้นให้ยกเลิกการประมวลผลต่อไป + +--- + +## ขั้นตอนที่ 5: กรณีขอบเขตทั่วไป & วิธีจัดการ + +| สถานการณ์ | สิ่งที่ควรระวัง | วิธีแก้ไข | +|-----------|-------------------|---------------| +| **Multiple signatures** | `IsSignatureCompromised` ตรวจสอบเพียงฟิลด์เดียวต่อครั้ง. | วนลูป `pdfSignature.GetSignatureNames()` แล้วตรวจสอบแต่ละอัน. | +| **Custom signature field name** | การใช้ `"Signature1"` อาจทำให้เกิดข้อยกเว้นหากชื่อแตกต่าง. | ดึงรายการชื่อก่อน หรือส่งชื่อที่ตรงกับที่คุณเห็นใน Acrobat. | +| **Large PDFs (100+ pages)** | การเพิ่มหมายเลข Bates อาจใช้หน่วยความจำมาก. | ใช้ `Document.Save` พร้อม `SaveOptions` ที่เปิดการสตรีม (`PdfSaveOptions { Compress = true }`). | +| **Non‑Latin characters in prefix** | บางฟอนต์ไม่รองรับ Unicode โดยค่าเริ่มต้น. | ตั้งค่า `pdfWithBates.Font` ให้เป็นฟอนต์ที่รองรับ Unicode เช่น `Arial Unicode MS`. | +| **Need to place numbers on the left** | การจัดแนวถูกกำหนดเป็น `Right` อย่างตายตัว. | เปลี่ยน `Alignment = HorizontalAlignment.Left` ใน `BatesNumberingOptions`. | + +--- + +## ขั้นตอนที่ 6: ตรวจสอบผลลัพธ์ด้วยตนเอง (ทางเลือก) + +เปิดไฟล์ `BatesNumbered.pdf` ด้วยโปรแกรมดู PDF ใดก็ได้: + +1. พลิกดูแต่ละหน้า—แต่ละหน้าควรแสดงป้ายเช่น **INV‑01000** ที่มุมล่าง‑ขวา. +2. ใช้ **Signature Panel** ของ Acrobat เพื่อดับเบิลคลิกที่ลายเซ็นและยืนยันสถานะตรงกับผลลัพธ์ในคอนโซล. + +หากทุกอย่างตรงกัน คุณได้ตรวจสอบสถานะ **check pdf signature** สำเร็จและได้ทำการ **add bates numbering** ไปพร้อมกันในขั้นตอนเดียว. + +--- + +## คำถามที่พบบ่อย + +**Q:** ฉันสามารถตรวจสอบลายเซ็นโดยไม่โหลดเอกสารทั้งหมดได้หรือไม่? +**A:** Aspose.Pdf ทำการสตรีมไฟล์ภายใน แต่คุณยังคงต้องมีอินสแตนซ์ `Document` สำหรับการทำงาน หากไฟล์มีขนาดใหญ่มาก ควรใช้ `PdfFileSignature` โดยตรงกับสตรีมไฟล์เพื่อประหยัดหน่วยความจำ. + +**Q:** ฉันต้องการไลเซนส์สำหรับ Aspose.Pdf หรือไม่? +**A:** การประเมินฟรีทำงานได้ แต่จะมีลายน้ำ หากใช้งานในผลิตภัณฑ์จริงควรมีไลเซนส์ที่ถูกต้อง มิฉะนั้นไฟล์ PDF ที่ได้จะมีแบนเนอร์ของ Aspose. + +**Q:** ถ้าฉันต้องการเพิ่มหมายเลข Bates เฉพาะบางหน้าจะทำอย่างไร? +**A:** ใช้ `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` โดยอาร์เรย์ระบุหมายเลขหน้าที่ต้องการใส่หมายเลข. + +--- + +## สรุป + +ตอนนี้คุณรู้แล้วว่า **how to verify PDF signature** ด้วย Aspose.Pdf, เข้าใจความหมายของผลลัพธ์แบบบูลีน, และสามารถ **add bates numbering** ให้กับ PDF ใดก็ได้ที่คุณควบคุม ตัวอย่างเต็มที่สามารถรันได้รวมทั้งสองงานไว้ในเครื่องมือคอนโซลเดียวที่ตรวจสอบความถูกต้องของเอกสารและใส่สติกเกอร์พร้อมตัวระบุที่พร้อมตรวจสอบ + +ต่อไปคุณอาจสำรวจ **how to verify signature** กับ trusted root store, หรือทดลองสไตล์ **add bates numbering** แบบกำหนดเอง เช่น สแตมป์แนวทแยงหรือคำนำหน้าตามส่วนต่างๆ ทั้งสองหัวข้อสร้างบนพื้นฐานที่คุณเพิ่งเรียนรู้และจะทำให้กระบวนการประมวลผลเอกสารของคุณแข็งแรงยิ่งขึ้น + +ขอให้สนุกกับการเขียนโค้ด และจำไว้ว่า การตรวจสอบลายเซ็นและการใส่หมายเลขหน้าเป็นเรื่องง่ายเมื่อมีโค้ดที่ถูกต้อง! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/thai/net/printing-rendering/_index.md index 88c549acb..67de6e363 100644 --- a/pdf/thai/net/printing-rendering/_index.md +++ b/pdf/thai/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ ### [ตั้งค่าปัจจัยการซูมแบบกำหนดเองใน PDF โดยใช้ Aspose.PDF สำหรับ .NET - คู่มือฉบับสมบูรณ์](./aspose-pdf-net-set-zoom-factor-pdfs/) เรียนรู้วิธีตั้งค่าปัจจัยการซูมแบบกำหนดเองในเอกสาร PDF โดยใช้ Aspose.PDF สำหรับ .NET คู่มือนี้ครอบคลุมถึงขั้นตอนการติดตั้ง การนำไปใช้งาน และการใช้งานจริง +### [วิธีเรนเดอร์ PDF ด้วย C# – คู่มือครบถ้วนสำหรับ PNG, HTML และการประทับลายน้ำ](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +เรียนรู้วิธีแปลง PDF เป็น PNG หรือ HTML และเพิ่มสแตมป์ใน C# ด้วย Aspose.PDF อย่างละเอียด + ## แหล่งข้อมูลเพิ่มเติม - [Aspose.PDF สำหรับเอกสารประกอบ Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/thai/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/thai/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..7238b400e --- /dev/null +++ b/pdf/thai/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-04-02 +description: วิธีการเรนเดอร์ PDF ด้วย Aspose.PDF ใน C# เรียนรู้การแปลง PDF เป็น PNG, + การบันทึก PDF เป็น HTML, และการเพิ่มสแตมป์ข้อความที่ปรับให้พอดีอัตโนมัติอย่างมีประสิทธิภาพ. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: th +og_description: วิธีเรนเดอร์ PDF ด้วย Aspose.PDF ใน C#. คู่มือนี้แสดงการเรนเดอร์ PDF + เป็น PNG, การบันทึกเป็น HTML, และการสร้างสแตมป์ข้อความที่ปรับอัตโนมัติให้พอดี +og_title: วิธีเรนเดอร์ PDF ใน C# – PNG, HTML และตราประทับ Auto‑Fit +tags: +- Aspose.PDF +- C# +- PDF processing +title: วิธีเรนเดอร์ PDF ด้วย C# – คู่มือครบถ้วนสำหรับ PNG, HTML และการประทับ +url: /th/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีเรนเดอร์ PDF ใน C# – คู่มือฉบับสมบูรณ์สำหรับ PNG, HTML & การสแตมป์ + +เคยสงสัย **วิธีเรนเดอร์ PDF** ในแอปพลิเคชัน .NET โดยไม่สูญเสียตัวอักษรแม้ตัวเดียวหรือไม่? บางครั้งคุณอาจลองใช้ `PdfRenderer` อย่างรวดเร็วแล้วเจออักขระหายไป, หรือคุณต้องการ PNG คมชัดสำหรับรูปย่อแต่ผลลัพธ์ดูเป็นหยัก. จากประสบการณ์ของผม, การผสมผสานตัวเลือกการเรนเดอร์และการจัดการฟอนต์ที่เหมาะสมทำให้แตกต่างระหว่างการพรีวิวที่พังและภาพที่พิกเซล‑เพอร์เฟค. + +ในบทเรียนนี้เราจะพาไปผ่านสามสถานการณ์จริงกับ Aspose.PDF for .NET: การเรนเดอร์หน้าของ PDF เป็น PNG พร้อมการวิเคราะห์ฟอนต์, การเพิ่ม `TextStamp` ที่ปรับขนาดฟอนต์อัตโนมัติ, และการบันทึก PDF เป็น HTML โดยใช้ตาราง CMap ของฟอนต์. เมื่อจบคุณจะสามารถ **เรนเดอร์ PDF เป็น PNG**, **แปลงหน้า PDF เป็น PNG**, **ส่งออกภาพหน้าของ PDF**, และแม้กระทั่ง **บันทึก PDF เป็น HTML** ได้อย่างไม่มีอุปสรรค. + +## Prerequisites + +- .NET 6.0 หรือใหม่กว่า (โค้ดนี้ทำงานบน .NET Framework 4.6+ ด้วย) +- Aspose.PDF for .NET NuGet package (`Install-Package Aspose.PDF`) +- ไฟล์ PDF ที่มีฟอนต์ซับซ้อน (เช่น `complexFonts.pdf`) สำหรับการสาธิตการเรนเดอร์ +- ความคุ้นเคยพื้นฐานกับ C# และ Visual Studio (หรือ IDE ใดก็ได้ที่คุณชอบ) + +> **Pro tip:** หากคุณทำงานบนเซิร์ฟเวอร์ CI, อย่าลืมให้ไฟล์ลิขสิทธิ์ของ Aspose ถูกฝังเป็น resource หรืออ้างอิงผ่าน environment variable เพื่อหลีกเลี่ยงลายน้ำการประเมินผล. + +--- + +## ## วิธีเรนเดอร์ PDF เป็น PNG พร้อมการวิเคราะห์ฟอนต์ + +### ทำไมต้องวิเคราะห์ฟอนต์? + +เมื่อ PDF มีฟอนต์ที่กำหนดเองหรือฝังไว้, การเรนเดอร์แบบธรรมดาอาจทำให้ตัวอักษรหายไปเพราะ renderer ไม่สามารถแมปได้. การเปิด `AnalyzeFonts` จะบังคับให้ Aspose ตรวจสอบสตรีมฟอนต์และแทนที่ glyph ที่ขาดหาย, ทำให้ได้ภาพที่ตรงกับต้นฉบับอย่างสมบูรณ์. + +### การดำเนินการแบบขั้นตอน + +1. **สร้าง `PngDevice` พร้อมเปิด `AnalyzeFonts`.** +2. **โหลด PDF ต้นฉบับ** ด้วย `Document`. +3. **ประมวลผลหน้าที่ต้องการ** แล้วบันทึก PNG ลงดิสก์. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**สิ่งที่คุณควรเห็น:** ไฟล์ชื่อ `rendered.png` ใน `YOUR_DIRECTORY` ที่ดูเหมือนกับหน้าที่หนึ่งของ `complexFonts.pdf` อย่างครบถ้วน, รวมถึงอักขระพิเศษและเครื่องหมายวรรณยุกต์ทั้งหมด. + +![หน้าที่แปลงจาก PDF เป็นภาพ PNG](rendered.png "หน้าที่แปลงจาก PDF เป็นภาพ PNG") + +#### ข้อผิดพลาดทั่วไป & วิธีหลีกเลี่ยง + +- **ฟอนต์หายบนเซิร์ฟเวอร์:** หาก PDF อ้างอิงฟอนต์ที่ไม่ได้ฝังไว้, ให้วางฟอนต์เหล่านั้นใน path การค้นหาของแอปพลิเคชันหรือเปิด `FontRepository` ให้ชี้ไปยังโฟลเดอร์ที่กำหนดเอง. +- **PDF ขนาดใหญ่:** การเรนเดอร์หลายหน้าในลูปอาจใช้หน่วยความจำมาก; ควรทำการ dispose `Document` แต่ละอินสแตนซ์โดยเร็วหรือใช้บล็อก `using` ตามตัวอย่าง. + +--- + +## ## การเพิ่ม Auto‑Fit TextStamp (Render PDF with Dynamic Text) + +### ต้องการสแตมป์ที่ปรับขนาดอัตโนมัติเมื่อไหร่? + +ลองนึกว่าคุณสร้างใบแจ้งหนี้และต้องการวางลายน้ำ “PAID” ที่พอดีกับสี่เหลี่ยมใดก็ได้ที่คุณเลือก, ไม่ว่าเนื้อความจะยาวแค่ไหน. การคำนวณขนาดฟอนต์ด้วยตนเองทำได้ยาก; `AutoAdjustFontSizeToFitStampRectangle` ของ Aspose จะทำงานแทนคุณ. + +### การดำเนินการแบบขั้นตอน + +1. **ตั้งค่า `TextStamp`** พร้อมคุณสมบัติ auto‑adjust. +2. **โหลด PDF ปลายทาง** ที่ต้องการสแตมป์. +3. **เพิ่มสแตมป์ลงในหน้า** แล้วบันทึกผลลัพธ์. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**ผลลัพธ์:** `stampAutoFit.pdf` มีข้อความ “Important notice” ที่ขนาดพอดีกับสี่เหลี่ยม 300 × 150 pt, ไม่ว่า string ดั้งเดิมจะยาวแค่ไหนก็ตาม. + +#### กรณีขอบที่ควรพิจารณา + +- **ข้อความยาวมาก:** หากข้อความยาวเกินสี่เหลี่ยมแม้ที่ขนาดฟอนต์ที่เล็กที่สุด, Aspose จะตัดข้อความตาม `WordWrapMode`. คุณสามารถตรวจสอบความยาวล่วงหน้าหรือเพิ่มขนาดสี่เหลี่ยมได้. +- **หลายสแตมป์:** การใช้ instance ของ `TextStamp` เดียวกันบนหลายหน้าได้, แต่ต้องจำว่า property ตำแหน่ง (`Left`, `Top`) จะคงค่าที่ใช้ครั้งสุดท้าย—รีเซ็ตตามต้องการ. + +--- + +## ## การบันทึก PDF เป็น HTML โดยใช้ตาราง CMap ของฟอนต์ + +### ทำไมต้องใช้ตาราง CMap? + +เมื่อแปลง PDF เป็น HTML, การรักษาแมป Unicode เป็นสิ่งสำคัญสำหรับข้อความที่สามารถค้นหาได้. กลยุทธ์ที่อิง CMap จะบังคับให้ Aspose ให้ความสำคัญกับ character map ภายในของฟอนต์, ซึ่งมักให้การสกัดข้อความที่แม่นยำกว่าการเข้ารหัสทั่วไป. + +### การดำเนินการแบบขั้นตอน + +1. **สร้าง `HtmlSaveOptions`** พร้อมกฎการเข้ารหัสที่อิง CMap. +2. **โหลด PDF ต้นฉบับ**. +3. **บันทึกเป็น HTML** ด้วย options ที่กำหนดไว้. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**สิ่งที่คุณจะได้:** โฟลเดอร์ (หาก `SplitIntoPages` เป็น true) ที่มีไฟล์ `cmapHtml.html` และทรัพยากรที่เกี่ยวข้อง. เปิด HTML ในเบราว์เซอร์แล้วคุณจะเห็นข้อความที่สามารถเลือกและค้นหาได้ตรงกับ PDF ต้นฉบับเกือบทั้งหมด. + +#### เคล็ดลับสำหรับการส่งออก HTML ที่สะอาด + +- **รูปภาพ vs. เวกเตอร์:** ตั้งค่า `RasterImagesSavingMode` เป็น `RasterImagesSavingMode.AsEmbeddedPartsOfPng` หากคุณต้องการ PNG แทน JPEG เพื่อกราฟิกที่คมชัด. +- **PDF ขนาดใหญ่:** ใช้ `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` เพื่อให้แต่ละหน้าเป็นไฟล์ HTML ที่เบา. + +--- + +## ## ตัวอย่างทำงานเต็มรูปแบบ – ทั้งสามสถานการณ์ในโปรเจกต์เดียว + +ด้านล่างเป็นแอปคอนโซลที่รวมเทคนิคทั้งสามไว้ในหนึ่งที่. คัดลอก‑วางลงในโปรเจกต์คอนโซล C# ใหม่, เพิ่มแพคเกจ NuGet ของ Aspose.PDF, แล้วปรับเส้นทางไฟล์ตามต้องการ. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +รันโปรแกรม, คุณจะพบ: + +- `rendered.png` – ภาพที่สมบูรณ์ของหน้าที่หนึ่งของ PDF. +- `stampAutoFit.pdf` – PDF ต้นฉบับที่มีสแตมป์ “Important notice” ปรับขนาดอัตโนมัติ. +- `cmapHtml.html` (พร้อมไฟล์ HTML แยกหน้า) – เวอร์ชัน HTML ที่รักษาการเข้ารหัสข้อความต้นฉบับไว้. + +--- + +## ## คำถามที่พบบ่อย (FAQ) + +**Q: `AnalyzeFonts` ทำให้เวลาเรนเดอร์เพิ่มขึ้นหรือไม่?** +A: เพิ่มขึ้นเล็กน้อย, เนื่องจาก Aspose ต้องสแกนสตรีมฟอนต์แต่ละตัว. การแลกเปลี่ยนนี้มักคุ้มค่าสำหรับ PDF ซับซ้อนที่ไม่สามารถยอมให้ glyph หายได้. + +**Q: สามารถเรนเดอร์หลายหน้าในลูปได้หรือไม่?** +A: ทำได้แน่นอน. เพียงวนลูป `sourcePdf.Pages` แล้วเรียก `pngDevice.Process(page, $"page{page.Number}.png")`. อย่าลืม dispose `Document` หากเปิดหลายไฟล์แยกกัน. + +**Q: ถ้า + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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 4325e37c5..e2bfcd810 100644 --- a/pdf/turkish/net/conversion-export/_index.md +++ b/pdf/turkish/net/conversion-export/_index.md @@ -57,7 +57,7 @@ Aspose.PDF for .NET kullanarak PDF sayfalarını yüksek kaliteli PNG görüntü Bu kapsamlı kılavuzla Aspose.PDF for .NET'i kullanarak PDF sayfalarını yüksek kaliteli BMP görüntülerine nasıl dönüştüreceğinizi öğrenin. ### [.NET için Aspose.PDF Kullanarak PDF'yi EMF'ye Dönüştürme: Eksiksiz Bir Kılavuz](./convert-pdf-emf-aspose-net-guide/) -Aspose.PDF for .NET kullanarak PDF sayfalarını EMF formatına nasıl dönüştüreceğinizi öğrenin. Bu kılavuz kurulumu, adım adım talimatları ve en iyi uygulamaları kapsar. +Aspose.PDF for .NET kullanarak PDF sayfalarını EMF formatına nasıl dönüştürececeğinizi öğrenin. Bu kılavuz kurulumu, adım adım talimatları ve en iyi uygulamaları kapsar. ### [PDF'yi Aspose.PDF for .NET ile EMF'ye dönüştürün](./convert-pdf-to-emf-aspose-dotnet/) Aspose.PDF Net için bir kod öğreticisi @@ -221,6 +221,9 @@ Aspose.PDF for .NET kullanarak PDF belgelerini harici PNG görüntüleriyle HTML ### [Aspose.PDF .NET ile PDF'yi HTML'ye Dönüştürme: Kapsamlı Bir Kılavuz](./aspose-pdf-net-pdf-to-html-conversion/) Aspose.PDF for .NET kullanarak PDF'den HTML'e dönüştürmede ustalaşın. Özelleştirilebilir seçeneklerle belge erişilebilirliğini ve etkileşimini geliştirin. +### [PDF'yi HTML'ye Dönüştürme ve PDF İmzasını Doğrulama – Tam Aspose .NET Kılavuzu](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Aspose.PDF for .NET kullanarak PDF'yi HTML'ye dönüştürüp, aynı anda imzasını doğrulama adımlarını öğrenin. + ### [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 diff --git a/pdf/turkish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/turkish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..a32844236 --- /dev/null +++ b/pdf/turkish/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,258 @@ +--- +category: general +date: 2026-04-02 +description: Vektörleri koruyarak PDF'yi HTML'ye dönüştürün, ardından Aspose PDF kullanarak + PDF imzasını doğrulayın. Aspose PDF dönüşümünü öğrenin ve C#'ta PDF dijital imzasını + kontrol edin. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: tr +og_description: Vektörleri koruyarak PDF'yi HTML'ye dönüştürün ve Aspose PDF ile PDF + imzasını doğrulayın. Adım adım C# kodu, ipuçları ve uç durum yönetimi. +og_title: PDF'yi HTML'ye Dönüştür ve PDF İmzasını Doğrula – Tam Aspose .NET Öğreticisi +tags: +- Aspose.PDF +- C# +- PDF processing +title: PDF'yi HTML'ye Dönüştür ve PDF İmzasını Doğrula – Tam Aspose .NET Rehberi +url: /tr/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF'yi HTML'ye Dönüştürme ve PDF İmzasını Doğrulama – Tam Aspose .NET Eğitimi + +Hiç **PDF'yi HTML'ye dönüştürmek** istediğinizde vektör kalitesinin kaybolmasından ya da dijital imzaların bozulmasından endişe ettiniz mi? Tek başınıza değilsiniz. Birçok geliştirici, PDF yalnızca vektör grafikleri ya da SHA‑3 tabanlı bir dijital imza içerdiğinde bir duvara çarpar—standart dönüştürücüler ya her şeyi rasterleştirir ya da imzayı tamamen görmezden gelir. + +Bu rehberde **Aspose.Pdf** for .NET kullanarak pratik bir çözüm üzerinden ilerleyeceğiz: önce raster görüntüleri ayıklayıp yalnızca vektör‑tabanlı bir PDF'yi temiz HTML'ye dönüştüreceğiz, ardından **PDF imzasını doğrulama** (evet, SHA‑3‑256 imzasını) nasıl yapılır gösterecek ve sonucu konsolda göstereceğiz. Sonunda her iki görevi de yapan, çalıştırmaya hazır bir C# programına ve yaygın tuzaklardan kaçınmak için birkaç ipucuya sahip olacaksınız. + +## Gereksinimler + +- **Aspose.Pdf for .NET** (2026‑04 itibarıyla en son sürüm, ör. 23.12). +- Bir .NET geliştirme ortamı (Visual Studio 2022 veya C# uzantılı VS Code). +- İki örnek PDF: + 1. `vectorOnly.pdf` – yalnızca vektör ve metin içerir, raster görüntü yok. + 2. `signed_sha3.pdf` – SHA‑3‑256 hash ile dijital olarak imzalanmış. + +`Aspose.Pdf` dışındaki ekstra NuGet paketine gerek yok. + +--- + +## Adım 1: Projeyi Oluşturun ve PDF'leri Yükleyin + +Yeni bir console uygulaması oluşturun, Aspose.Pdf NuGet paketini ekleyin ve gerekli ad alanlarını içeri aktarın. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Neden önemli*: Belgeleri önceden yüklemek, nesneleri hem dönüşüm hem de imza doğrulama için yeniden kullanmamızı sağlar ve bellek kullanımını düşük tutar. + +--- + +## Adım 2: Raster Görüntüleri Atlayarak PDF'yi HTML'ye Dönüştürün + +Aspose.Pdf’nin `HtmlSaveOptions` sınıfı, görüntülerin nasıl işleneceği konusunda ince ayar yapmanıza olanak tanır. `RasterImagesSavingMode` değerini `Skip` olarak ayarlamak, kütüphanenin raster resimleri tamamen görmezden gelmesini sağlar—vektör‑only kaynak için mükemmeldir. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Beklenen çıktı**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*İpucu*: Daha sonra HTML'yi bir web sayfasına gömmek isterseniz, oluşturulan dosya yalnızca SVG ve CSS içerir—kütüphane ağır PNG/JPEG blokları eklemez. + +--- + +## Adım 3: İmza İşleyicisini Hazırlayın + +Aspose.Pdf’nin `PdfFileSignature` sınıfı, dijital‑imza işlemlerinin giriş noktasıdır. İmza sözlüğünü okur, ismi çıkarır ve belirli bir hash algoritmasıyla doğrulama yapmanıza izin verir. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Neden kritik*: İşleyici olmadan imzaları listeleyemez veya ihtiyacınız olan hash algoritmasını (ör. SHA‑3‑256) seçemezsiniz. + +--- + +## Adım 4: SHA‑3‑256 Kullanarak Her İmzayı Listeleyin ve Doğrulayın + +`GetSignNames()` metodu PDF içindeki tüm imza etiketlerini döndürür. Bunlar üzerinde döngü kurup, `VerifySignature` metodunu `DigestHashAlgorithm.Sha3_256` ile çağırın ve sonucu yazdırın. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Örnek konsol çıktısı**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Köşe durumu*: İmza farklı bir hash (ör. SHA‑256) kullanıyorsa doğrulama `False` dönecektir. Döngü içinde diğer `DigestHashAlgorithm` değerlerini deneyerek bir yedek kontrol ekleyebilirsiniz. + +--- + +## Adım 5: Tam Çalışan Örnek (Tüm Kod Tek Bir Yerde) + +Aşağıda `Program.cs` dosyasına kopyalayıp yapıştırabileceğiniz tam program yer alıyor. `YOUR_DIRECTORY` kısmını PDF'lerinizin bulunduğu gerçek klasörle değiştirin. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Programı çalıştırın (`dotnet run` ya da Visual Studio’da **F5** tuşuna basın). Dönüştürme onayı ardından imza doğrulama sonuçlarını görmelisiniz. + +--- + +## Sık Sorulan Sorular & Çözüm Önerileri + +| Soru | Cevap | +|------|-------| +| **HTML hâlâ orijinal fontları içerir mi?** | Aspose.Pdf, kullanılan fontları varsayılan olarak base‑64 veri URI'ları olarak gömer, bu sayede host makinede fontlar yüklü olmasa bile çıktı doğru renderlanır. | +| **PDF'im hem vektör hem de görüntü içeriyorsa ne yapmalıyım?** | Görüntüleri atmak için `RasterImagesSavingMode = Skip` tutun, ya da ihtiyacınız varsa `EmbedAll` seçeneğine geçin. Bu seçenek dönüşüm başına ayarlanabilir, iki farklı versiyon için iki geçiş yapabilirsiniz. | +| **İmzam SHA‑512 kullanıyor—nasıl doğrularım?** | `DigestHashAlgorithm.Sha3_256` yerine `DigestHashAlgorithm.Sha512` kullanın. İmza sözlüğünden algoritmayı tespit edip dinamik olarak da seçebilirsiniz. | +| **İmzalayanın sertifika detaylarını alabilir miyim?** | Evet. Doğrulama sonrası `signatureHandler.GetSignatureInfo(signName).Certificate` çağrısıyla X.509 sertifikasını alıp `Subject` ve `Issuer` gibi alanları inceleyebilirsiniz. | +| **PDF şifre korumalıysa ne yapmalıyım?** | `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })` şeklinde şifreyi sağlayarak yükleyin. İş akışı aynı kalır. | + +--- + +## Üretim‑Hazır Kod İçin Profesyonel İpuçları + +1. **PDF'leri Doğru Şekilde Dispose Edin** – `PdfDocument` nesnelerini `using` bloğu içinde tutun ya da `Dispose()` çağırarak yerel kaynakları serbest bırakın. +2. **Toplu İşlem** – Onlarca PDF'iniz varsa bir klasörü döngüyle işleyin, sonuçları CSV'ye kaydedin ve `Parallel.ForEach` ile dönüşümü paralelleştirin. +3. **Logging** – `Console.WriteLine` yerine yapılandırılmış bir logger (Serilog, NLog) kullanın; özellikle çok sayıda imza doğrularken izlenebilirliği artırır. +4. **Hata Yönetimi** – Bozuk dosyaları nazikçe ele almak için `Aspose.Pdf.Exceptions` yakalayın: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Sürüm Uyumluluğu** – Aspose.Pdf hızlı evrim geçirir. `csproj` dosyanızda belirtilen tam sürümle test edin. Gösterilen API 23.x ve sonrası için geçerlidir. + +--- + +## Sonuç + +Sadece vektör ve metin içeren bir PDF'yi **HTML'ye dönüştürdük**, ardından **SHA‑3‑256 algoritmasıyla PDF imzasını doğruladık**—hepsi birkaç satır C# kodu ile. Özetle: + +- Temiz vektör‑only HTML için `HtmlSaveOptions.RasterImagesSavingMode = Skip` kullanın. +- Dijital imzayı güvenilir bir şekilde **kontrol etmek** için `PdfFileSignature` ve `DigestHashAlgorithm.Sha3_256`'yı kullanın. + +Bundan sonra **aspose pdf conversion** gibi konulara, PDF'leri PNG'ye dönüştürmeye, gömülü dosyaları çıkarmaya ya da PDF kabul edip doğrulanmış HTML snippet'leri dönen bir web servisi oluşturmaya yönelerek ilerleyebilirsiniz. + +Deneyin, seçenekleri ayarlayın ve neler keşfettiğinizi bize bildirin. İyi kodlamalar! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/turkish/net/digital-signatures/_index.md b/pdf/turkish/net/digital-signatures/_index.md index d1543118f..44a38080b 100644 --- a/pdf/turkish/net/digital-signatures/_index.md +++ b/pdf/turkish/net/digital-signatures/_index.md @@ -26,6 +26,9 @@ Aspose.PDF for .NET kullanarak özel görünümle bir PDF'yi dijital olarak nas ### [Aspose.PDF ile PDF'lerden Dijital İmza Bilgilerini Çıkarın](./extract-digital-signature-info-from-pdfs-aspose-pdf/) Aspose.PDF Net için bir kod öğreticisi +### [PDF'den İmzaları Çıkarma – Aspose C# Kılavuzu](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +C# kullanarak PDF dosyalarından dijital imzaları nasıl çıkaracağınızı öğrenin. + ### [Aspose.PDF for .NET ile PDF İmza Dili Nasıl Değiştirilir](./change-pdf-signature-language-aspose-net/) Aspose.PDF for .NET kullanarak PDF'lerdeki dijital imza metnini nasıl özelleştireceğinizi öğrenin. Çok dilli belge hazırlama ve yerelleştirme için mükemmeldir. @@ -44,6 +47,9 @@ Aspose.PDF .NET kullanarak PDF'lerden dijital imzaları etkili bir şekilde nas ### [.NET için Aspose.PDF Kullanarak PDF İmzalarını Doğrulama: Kapsamlı Bir Kılavuz](./verify-pdf-signatures-aspose-pdf-net/) Aspose.PDF for .NET kullanarak PDF dosyalarındaki dijital imzaların nasıl doğrulanacağını öğrenin. Bu kılavuz kurulum, uygulama ve pratik uygulamaları kapsar. +### [PDF İmzasını Doğrulama ve Bates Numaralandırması Ekleme – Tam C# Kılavuzu](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +C# kullanarak PDF imzasını doğrulama ve belgeye Bates numaralandırması ekleme adımlarını öğrenin. + ### [C# ile PDF İmzasını Doğrulama – Dijital İmza PDF'sini Doğrulamak için Tam Kılavuz](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) C# kullanarak PDF dosyalarındaki dijital imzaları nasıl doğrulayacağınızı adım adım öğrenin. Güvenli doğrulama tekniklerini keşfedin. @@ -58,6 +64,7 @@ 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. + ### [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-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/turkish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..3d02d427f --- /dev/null +++ b/pdf/turkish/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-02 +description: Aspose.Pdf'i C# ile kullanarak imzaları nasıl çıkaracağınızı, alan eklemeyi, + boş sayfa PDF eklemeyi, widget eklemeyi ve PDF'de şeffaflığı korumayı öğrenin. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: tr +og_description: Aspose.Pdf kullanarak bir PDF'den imzaları nasıl çıkarılır ve alan + ekleme, boş sayfalar, widget'lar ve şeffaflığı koruma gibi ilgili görevler nasıl + gerçekleştirilir. +og_title: PDF'den İmzaları Nasıl Çıkarabilirsiniz – Aspose C# Rehberi +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: PDF'den İmzaları Çıkarma – Aspose C# Rehberi +url: /tr/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF'den İmzaları Nasıl Çıkarılır – Aspose C# Rehberi + +**PDF'den imzaları çıkarmak**, sözleşme işleme, fatura onayları veya dijital imzalara dayanan herhangi bir iş akışını otomatikleştirirken yaygın bir gereksinimdir. +Bu rehberde ayrıca **alan ekleme**, **boş sayfa PDF ekleme**, **widget ekleme** ve **PDF'de şeffaflığı koruma** konularını Aspose.Pdf .NET kütüphanesini kullanarak ele alacağız. + +Her gece onlarca imzalı PDF aldığınızı hayal edin; her dosyayı manuel olarak açıp imzaları doğrulamak bir kabus olurdu. Birkaç satır C# kodu ile imza adlarını programlı olarak alabilir, orijinal grafikleri bozmadan tutabilir ve hatta mevcut şeffaflığı veya renk profillerini bozmadan belgeye yeni form alanları ekleyebilirsiniz. + +> **Ne elde edeceksiniz:** şeffaflığı koruyarak bir PDF'yi PDF/X‑4'e dönüştüren, gömülü tüm imza adlarını çıkaran, boş bir sayfa ekleyen ve aynı sayfada iki yerde görünen bir metin kutusu form alanı oluşturan tam, çalıştırılabilir bir örnek. + +## Önkoşullar + +- .NET 6.0 veya üzeri (kod .NET Framework ile de çalışır) +- Aspose.Pdf for .NET **v25.2** veya daha yenisi (`GetSignatureNames()` için gerekli) +- Visual Studio projesi ya da herhangi bir C# IDE +- Kontrol ettiğiniz bir klasörde üç örnek PDF: + - `source.pdf` – şeffaflığı koruyarak dönüştürmek istediğiniz herhangi bir PDF + - `signed.pdf` – içinde zaten dijital imzalar bulunan bir PDF + - (isteğe bağlı) çıktı dosyaları için boş bir klasör + +> **Pro ipucu:** Henüz lisanslı bir kopyanız yoksa, Aspose web sitesinden ücretsiz geçici bir lisans talep edebilirsiniz. Ücretsiz mod test için çalışır ancak bir filigran ekler. + +## 1. Adım – PDF/X‑4'e Dönüştürerek Şeffaflığı Korumak + +Şeffaflık ve gömülü renk profilleri, bir PDF düzleştirildiğinde sıkça kaybolur. **PDF/X‑4**'e dönüştürmek bu görsel öğeleri korur; bu, baskıya hazır belgeler için kritik öneme sahiptir. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Neden önemli:** +PDF/X‑4, canlı şeffaflığı koruyan grafik‑değişim PDF'leri için ISO standardıdır. `PdfFormatConversionOptions` kullanarak şeffaf nesnelerin rasterleştirilmesi gibi yaygın tuzaklardan kaçınılır; bu da dosya boyutunun dramatik şekilde artmasını ve kalitenin düşmesini önler. + +## 2. Adım – PDF'den İmzaları Nasıl Çıkarılır + +Aspose, 25.2 sürümünde `GetSignatureNames()` metodunu tanıttı; bu sayede imza çıkarma tek bir satırda yapılabiliyor. Metod, her dijital imza alanına atanmış mantıksal adların bir dizisini döndürür. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**Beklenen sonuç:** `signed.pdf` içinde *ManagerSig* ve *ClientSig* adında iki imza varsa, konsol şu çıktıyı verir: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Köşe durumları yönetimi:** +- PDF'de imza yoksa, `GetSignatureNames()` boş bir dizi döndürür – istisna fırlatılmaz. +- Bozuk imza alanları içeren PDF'lerde, çağrıyı bir `try/catch` bloğuna alıp hatayı kaydedebilir, tüm süreci durdurmadan devam edebilirsiniz. + +## 3. Adım – Boş Sayfa PDF Ekleme ve Çoklu Widget'lı Metin Kutusu Oluşturma + +Yeni bir sayfa eklemek basittir, ancak **alan ekleme** ve **widget ekleme** birlikte bir miktar incelik gerektirir. *Widget*, bir form alanının görsel temsilidir; aynı mantıksal alana birden fazla widget ekleyerek aynı verinin birden çok konumda görünmesini sağlayabilirsiniz. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Neden çoklu widget kullanılır?** +Örneğin, bir sözleşmenin ön ve arka yüzünde aynı yorumu göstermeniz gerektiğinde, iki widget'ı aynı alana bağlayarak bir konumda yapılan değişiklik otomatik olarak diğerinde güncellenir. + +**Yaygın tuzaklar:** +- Alanı `newDoc.Form`'a eklemeyi unutmak, widget'ın PDF görüntüleyicilerde görünmemesine yol açar. +- Her iki widget için aynı dikdörtgen koordinatlarını kullanmak, onları üst üste yığar—`Rectangle` değerlerinin farklı olduğundan emin olun. + +## 4. Adım – Hepsini Bir Araya Getirmek: Tam, Çalıştırılabilir Bir Örnek + +Aşağıda, her adımı sırasıyla yürüten tek bir program yer alıyor. Yeni bir konsol projesine kopyalayıp yapıştırın, yolları ayarlayın ve çalıştırın. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Beklenen Çıktı + +Programı çalıştırdığınızda aşağıdakine benzer bir çıktı görmelisiniz: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +`TextBoxMultipleWidgets.pdf` dosyasını Adobe Acrobat Reader'da açın; **Comments** etiketiyle iki aynı metin kutusu göreceksiniz—biri üstte, diğeri biraz daha altta. Birine yazdığınızda diğeri anında güncellenir. + +## Sıkça Sorulan Sorular (SSS) + +| Soru | Cevap | +|------|-------| +| **Gerçek imza baytlarını çıkarabilir miyim?** | `GetSignatureNames()` sadece mantıksal adları döndürür. Sertifika veya imza değerini almak için `SignatureField` nesnelerini (`document.Form["fieldName"] as SignatureField`) kullanmanız gerekir. | +| **PDF/X‑4 dönüşümü şifreli PDF'lerde çalışır mı?** | Evet, şifreyi `Document.Open(file, password)` ile sağladığınız sürece çalışır. | +| **İki taneden fazla widget eklemek istersem?** | Her ek `WidgetAnnotation` için `textBox.Widgets.Add()` metodunu çağırmanız yeterlidir. | +| **Boş sayfa orijinal PDF'nin sayfa boyutunu miras alır mı?** | Yeni sayfa varsayılan boyutu (A4) kullanır. Gerekirse özel boyutlu bir `Page` nesnesi geçirebilirsiniz. | +| **Kod .NET Core ile uyumlu mu?** | Kesinlikle—Aspose.Pdf platformlar arasıdır. .NET Core projenize NuGet paketini eklemeniz yeterlidir. | + +## Sonuç + +Bu öğreticide **PDF'den imzaları nasıl çıkarılır** konusunu gösterdik ve aynı zamanda **alan ekleme**, **boş sayfa PDF ekleme**, **widget ekleme** ve **şeffaflığı koruma** konularını Aspose.Pdf for C# kullanarak ele aldık. Artık bu çözümü herhangi bir belge işleme hattına sorunsuzca entegre edebileceksiniz. + +Bir sonraki meydan okumaya hazır mısınız? Bu teknikleri Aspose'un OCR modülüyle birleştirerek taranmış belgelerden metin okumayı deneyin. + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/turkish/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..5196bf83e --- /dev/null +++ b/pdf/turkish/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,205 @@ +--- +category: general +date: 2026-04-02 +description: PDF imzasını hızlıca doğrulayın ve Aspose.Pdf kullanarak Bates numaralandırması + eklemeyi öğrenin. Adım adım kod ve ipuçları içerir. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: tr +og_description: PDF imzasını hızlıca doğrulayın ve Aspose.Pdf kullanarak bates numaralandırması + eklemeyi öğrenin. Tam örneği izleyin ve yaygın hatalardan kaçının. +og_title: PDF İmzasını Doğrula ve Bates Numaralandırması Ekle – Tam C# Rehberi +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: PDF İmzasını Doğrula ve Bates Numaralandırması Ekle – Tam C# Rehberi +url: /tr/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF İmzasını Doğrulama ve Bates Numaralandırma – Tam C# Kılavuzu + +Sözleşmeyi göndermeden önce **PDF imzasını doğrulamanız** gerektiğinde, hangi API çağrısını kullanacağınızdan emin olmadınız mı? Yalnız değilsiniz—çok sayıda geliştirici, yasal bağlayıcı PDF'lerle çalışırken bu engelle karşılaşıyor. Bu öğreticide, Aspose.Pdf ile **PDF imzasını doğrulama** adımlarını gösterecek ve ardından **bates numaralandırma ekleme** yöntemini göstererek dosyalarınızın denetim‑hazır kalmasını sağlayacağız. + +Ayrıca **imzanın nasıl doğrulanacağını** programatik olarak ele alacak, **bates ekleme** işlemini tek bir geçişte nasıl yapacağınızı gösterecek ve **pdf imzasını kontrol et** sonuçlarını açıklayarak çıktıya güvenmenizi sağlayacağız. Sonunda, her iki görevi de yapan çalıştırılabilir bir C# konsol uygulamanız olacak—gizem yok, sadece net kod. + +## Gereksinimler + +- **.NET 6.0** veya üzeri (örnek .NET Framework 4.7+ ile de çalışır) +- **Aspose.Pdf for .NET** NuGet paketi (sürüm 23.11 veya daha yeni) +- Doğrulamak istediğiniz imzalı PDF dosyası (`signed.pdf`) +- Bates numaralarını alacak sade PDF (`input.pdf`) + +Eğer bunlara sahipseniz, hazırsınız. Ek SDK'lara ya da gizli yapılandırma dosyalarına gerek yok. + +## Adım 1: Projeyi Kurun + +Öncelikle bir konsol projesi oluşturun: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +`Program.cs` dosyasını açın ve varsayılan kodu temizleyin. Her şeyi baştan inşa edeceğiz, böylece son sürümü daha sonra kopyala‑yapıştırabilirsiniz. + +## Adım 2: PDF İmzasını Doğrulama + +### Doğrulamanın önemi + +Temel sertifika iptal edilmişse veya belge imzalandıktan sonra değiştirilmişse, dijital imza **tehlikeye girebilir**. Aspose.Pdf, bize bir boolean döndüren kullanışlı `IsSignatureCompromised` metodunu sağlar—basit, ancak çoğu denetim süreci için yeterince güçlü. + +### Kod Parçası + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Açıklama** + +- `Document` PDF'yi belleğe yükler. +- `PdfFileSignature` belgeyi sarar ve imza‑ile ilgili metodları sunar. +- `IsSignatureCompromised("Signature1")` *Signature1* adlı imzanın bütünlüğünü kontrol eder. +- Boolean sonuç, imzanın hâlâ güvenilir olup olmadığını size bildirir. + +> **Pro ipucu:** İmza alanının adından emin değilseniz, önce `pdfSignature.GetSignatureNames()` çağırın; bu, tüm imza tanımlayıcılarının bir listesini döndürür. + +## Adım 3: Bates Numaralandırma Seçeneklerini Hazırlama + +### Bates numaralandırma nedir? + +Bates numaraları, yasal veya adli belgelerin her sayfasına basılan sıralı tanımlayıcılardır. Keşif veya denetim süreçlerinde sayfalara referans vermeyi kolaylaştırır. Aspose.Pdf’nin `BatesNumberingOptions` nesnesi, önek, başlangıç numarası, basamak sayısı, hizalama ve kenar boşluğu gibi tüm biçimlendirme seçeneklerini tek bir nesnede özelleştirmenizi sağlar. + +### Kod Devamı + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Açıklama** + +- `BatesNumberingOptions` tüm biçimlendirme seçeneklerini merkezileştirir. +- `AddBatesNumbering` her sayfayı otomatik olarak döner—manuel bir döngüye gerek yoktur. +- `Prefix` (`INV-`) ve `StartNumber` (1000) `INV-01000`, `INV-01001` gibi etiketler üretir. +- Sayfadaki numaranın konumunu yükseltmek ya da alçaltmak için `BottomMargin` değerini ayarlayın. + +## Adım 4: Tam Örneği Çalıştırma + +Dosyayı kaydedin, ardından çalıştırın: + +```bash +dotnet run +``` + +İki konsol satırı görmelisiniz: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Eğer ilk satır `True` yazdırıyorsa, imza tehlikeye girmiş demektir—belge imzalandıktan sonra değiştirilmiş ya da sertifika artık geçerli değil anlamına gelir. Bu durumda, sonraki tüm işlemleri iptal edin. + +## Adım 5: Yaygın Kenar Durumları ve Nasıl Ele Alınır + +| Durum | Dikkat Edilmesi Gereken | Önerilen Çözüm | +|-----------|-------------------|---------------| +| **Multiple signatures** | `IsSignatureCompromised` sadece bir alanı bir seferde kontrol eder. | `pdfSignature.GetSignatureNames()` üzerinden döngü yaparak her birini doğrulayın. | +| **Custom signature field name** | `"Signature1"` kullanmak, isim farklıysa istisna fırlatabilir. | Önce isim listesini alın veya Acrobat'ta gördüğünüz tam ismi geçin. | +| **Large PDFs (100+ pages)** | Bates numaraları eklemek bellek yoğun olabilir. | `Document.Save` ile akışa izin veren `SaveOptions` kullanın (`PdfSaveOptions { Compress = true }`). | +| **Non‑Latin characters in prefix** | Bazı fontlar varsayılan olarak Unicode desteklemez. | `pdfWithBates.Font` değerini `Arial Unicode MS` gibi Unicode uyumlu bir fonta ayarlayın. | +| **Need to place numbers on the left** | Hizalama `Right` olarak sabitlenmiş. | `BatesNumberingOptions` içinde `Alignment = HorizontalAlignment.Left` olarak değiştirin. | + +## Adım 6: Sonucu Manuel Olarak Doğrulama (İsteğe Bağlı) + +`BatesNumbered.pdf` dosyasını herhangi bir PDF görüntüleyicide açın: + +1. Sayfaları geçin—her biri alt‑sağ köşede **INV‑01000** gibi bir etiket göstermelidir. +2. Acrobat’ın **Signature Panel**'ını kullanarak imzaya çift tıklayın ve durumun konsol çıktısıyla eşleştiğini doğrulayın. + +Her şey eşleşiyorsa, **pdf imzasını kontrol et** durumunu başarıyla doğrulamış ve **bates numaralandırma ekleme** işlemini tek seferde uygulamış oldunuz. + +## Sık Sorulan Sorular + +**S: Tüm belgeyi yüklemeden bir imzayı doğrulayabilir miyim?** +**C:** Aspose.Pdf dosyayı arka planda akış olarak okur, ancak yine de bir `Document` örneğine ihtiyaç duyarsınız. Çok büyük dosyalar için bellek kullanımını azaltmak amacıyla `PdfFileSignature`'ı doğrudan bir dosya akışıyla kullanmayı düşünün. + +**S: Aspose.Pdf için bir lisansa ihtiyacım var mı?** +**C:** Ücretsiz deneme sürümü çalışır, ancak filigran ekler. Üretim ortamında uygun bir lisans almanız gerekir; aksi takdirde oluşturulan PDF'ler Aspose banner'ı taşıyacaktır. + +**S: Bates numaralarını sadece belirli sayfalara eklemem gerekirse?** +**C:** `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` şeklinde, numaralandırmak istediğiniz sayfa numaralarını içeren bir dizi verin. + +## Sonuç + +Artık Aspose.Pdf ile **PDF imzasını nasıl doğrulayacağınızı** biliyor, boolean sonucun ne anlama geldiğini anlıyor ve kontrolünüzdeki herhangi bir PDF'ye güvenle **bates numaralandırma ekleyebiliyorsunuz**. Tam, çalıştırılabilir örnek her iki görevi birleştirerek belge özgünlüğünü kontrol eden ve denetim‑hazır tanımlayıcılarla damgalayan tek bir konsol aracı sunar. + +İleride, **imzanın nasıl doğrulanacağını** güvenilir bir kök mağazasıyla karşılaştırmayı keşfedebilir veya diyagonal damgalar ya da bölüm‑bazlı önekler gibi özel **bates numaralandırma** stilleriyle deneyler yapabilirsiniz. Her iki konu da yeni edindiğiniz temelin üzerine inşa edilir ve belge‑işleme hattınızı daha da sağlamlaştırır. + +Kodlamanın tadını çıkarın ve unutmayın—doğru kod elinizde olduğunda imzaları kontrol etmek ve sayfaları numaralandırmak çocuk oyuncağı! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/printing-rendering/_index.md b/pdf/turkish/net/printing-rendering/_index.md index 0528b7c2c..931607577 100644 --- a/pdf/turkish/net/printing-rendering/_index.md +++ b/pdf/turkish/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Aspose.PDF for .NET kullanarak bir PDF'in belirli sayfalarını nasıl verimli b ### [.NET için Aspose.PDF Kullanarak PDF'lerde Özel Yakınlaştırma Faktörünü Ayarlama - Eksiksiz Bir Kılavuz](./aspose-pdf-net-set-zoom-factor-pdfs/) Aspose.PDF for .NET kullanarak PDF belgelerinde özel bir yakınlaştırma faktörünün nasıl ayarlanacağını öğrenin. Bu kılavuz, kurulum, uygulama adımları ve pratik uygulamaları kapsar. +### [C#'ta PDF Render Etme – PNG, HTML ve Damgalama İçin Tam Kılavuz](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +C# kullanarak Aspose.PDF ile PDF'leri PNG, HTML formatına dönüştürmeyi ve damgalama işlemlerini adım adım öğrenin. + ## Ek Kaynaklar - [Net Belgeleme için Aspose.PDF](https://docs.aspose.com/pdf/net/) diff --git a/pdf/turkish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/turkish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..27fafaeae --- /dev/null +++ b/pdf/turkish/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,280 @@ +--- +category: general +date: 2026-04-02 +description: C#'ta Aspose.PDF kullanarak PDF nasıl render edilir. PDF'yi PNG'ye render + etmeyi, PDF'yi HTML olarak kaydetmeyi ve otomatik sığdırmalı metin damgalarını verimli + bir şekilde eklemeyi öğrenin. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: tr +og_description: Aspose.PDF kullanarak C# ile PDF nasıl render edilir? Bu kılavuz, + PDF'yi PNG'ye dönüştürmeyi, HTML olarak kaydetmeyi ve otomatik sığdırmalı metin + damgaları oluşturmayı gösterir. +og_title: C#'ta PDF Nasıl Render Edilir – PNG, HTML ve Otomatik Uyumlu Damgalar +tags: +- Aspose.PDF +- C# +- PDF processing +title: C#'ta PDF'yi Render Etme – PNG, HTML ve Damgalama İçin Tam Rehber +url: /tr/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#’ta PDF Nasıl Render Edilir – PNG, HTML ve Stamping İçin Tam Kılavuz + +Hiç **PDF render etmenin** .NET uygulamasında tek bir glifi bile kaybetmeden nasıl yapılacağını merak ettiniz mi? Belki hızlı bir `PdfRenderer` denediniz ve eksik karakterler gördünüz, ya da bir thumbnail için net bir PNG’ye ihtiyacınız var ama çıktı pikselli görünüyor. Deneyimlerime göre, doğru render seçenekleri ve font yönetimi, kırık bir önizleme ile piksel‑mükemmel bir görüntü arasındaki farkı belirler. + +Bu öğreticide Aspose.PDF for .NET ile üç gerçek‑dünya senaryosunu ele alacağız: bir PDF sayfasını PNG’ye render ederken fontları analiz etmek, otomatik olarak font boyutunu ayarlayan bir `TextStamp` eklemek ve PDF’yi fontun CMap tablosunu kullanarak HTML olarak kaydetmek. Sonunda **PDF’yi PNG’ye render edebilecek**, **PDF sayfasını PNG’ye dönüştürebilecek**, **PDF sayfa görüntüsünü dışa aktarabilecek** ve hatta **PDF’yi HTML olarak kaydedebileceksiniz**. + +## Prerequisites + +- .NET 6.0 veya üzeri (kod .NET Framework 4.6+ üzerinde de çalışır) +- Aspose.PDF for .NET NuGet paketi (`Install-Package Aspose.PDF`) +- Render demo’si için karmaşık fontlara sahip bir PDF dosyası (ör. `complexFonts.pdf`) +- C# ve Visual Studio (veya tercih ettiğiniz IDE) konusunda temel bilgi + +> **Pro tip:** Bir CI sunucusunda çalışıyorsanız, Aspose lisans dosyasının ya bir kaynak olarak gömülü olduğundan ya da ortam değişkeniyle referans verildiğinden emin olun; aksi takdirde değerlendirme filigranları görürsünüz. + +--- + +## ## How to Render PDF to PNG with Font Analysis + +### Why analyze fonts? + +Bir PDF özel ya da gömülü fontlar içerdiğinde, naif bir render bu fontları haritalayamaz ve glifleri atar. `AnalyzeFonts` özelliğini etkinleştirmek, Aspose’un font akışlarını incelemesini ve eksik glifleri ikame etmesini sağlar; böylece görüntü tam olarak orijinaliyle eşleşir. + +### Step‑by‑step implementation + +1. **`AnalyzeFonts` açık bir `PngDevice` oluşturun.** +2. **Kaynak PDF’yi** `Document` ile yükleyin. +3. **İstenen sayfayı işleyin** ve PNG’yi diske yazın. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**Görmeniz gereken:** `YOUR_DIRECTORY` içinde `rendered.png` adlı bir dosya; bu dosya `complexFonts.pdf`’nin ilk sayfasına, tüm özel karakterler ve diakritik işaretler dahil, birebir aynı görünür. + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### Common pitfalls & how to avoid them + +- **Sunucuda eksik fontlar:** PDF gömülü olmayan fontlara referans veriyorsa, bu fontları uygulamanın arama yoluna ekleyin ya da `FontRepository`’yi özel bir klasöre yönlendirin. +- **Büyük PDF’ler:** Bir döngüde çok sayıda sayfa render etmek bellek tüketebilir; her `Document` örneğini hemen `using` bloklarıyla yok edin. + +--- + +## ## Adding an Auto‑Fit TextStamp (Render PDF with Dynamic Text) + +### When would you need a dynamically sized stamp? + +Faturalar oluşturduğunuzu ve “PAID” gibi bir filigranı, metin uzunluğundan bağımsız olarak seçtiğiniz herhangi bir dikdörtgene sığdırmanız gerektiğini hayal edin. Font boyutunu manuel hesaplamak hataya açıktır; Aspose’un `AutoAdjustFontSizeToFitStampRectangle` özelliği bu işi sizin yerinize yapar. + +### Step‑by‑step implementation + +1. **Otomatik ayarlama özellikleriyle bir `TextStamp` yapılandırın.** +2. **Damgalamak istediğiniz hedef PDF’yi** yükleyin. +3. **Damgayı bir sayfaya ekleyin** ve sonucu kaydedin. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Sonuç:** `stampAutoFit.pdf` içinde “Important notice” metni, 300 × 150 pt dikdörtgene mükemmel şekilde sığacak şekilde boyutlandırılmıştır; orijinal metin uzunluğu ne olursa olsun. + +#### Edge cases to consider + +- **Çok uzun metinler:** Metin, en küçük font boyutunda bile dikdörtgeni aşarsa, Aspose `WordWrapMode`’a göre kırpar. Uzunluğu önceden kontrol edebilir ya da dikdörtgeni büyütebilirsiniz. +- **Birden fazla damga:** Aynı `TextStamp` örneğini farklı sayfalarda yeniden kullanabilirsiniz, ancak konum özellikleri (`Left`, `Top`) son değerlerini korur—gerektiğinde sıfırlamayı unutmayın. + +--- + +## ## Saving PDF as HTML Using the Font’s CMap Table + +### Why bother with the CMap table? + +PDF’yi HTML’ye dönüştürürken Unicode eşlemesinin korunması, aranabilir metin için kritiktir. CMap‑tabanlı strateji, Aspose’un fontun iç karakter haritasını önceliklendirmesini sağlar; bu da genellikle genel bir kodlamaya göre daha doğru metin çıkarımı verir. + +### Step‑by‑step implementation + +1. **CMap‑tabanlı kodlama kuralı ile `HtmlSaveOptions` oluşturun.** +2. **Kaynak PDF’yi** yükleyin. +3. **Yapılandırılmış seçeneklerle HTML olarak kaydedin.** + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**Elde edeceğiniz:** `SplitIntoPages` true ise bir klasör içinde `cmapHtml.html` ve ilgili kaynak dosyaları. HTML’yi bir tarayıcıda açtığınızda, orijinal PDF’ye neredeyse tamamen eşdeğer seçilebilir ve aranabilir metin göreceksiniz. + +#### Tips for a clean HTML export + +- **Görseller vs. vektörler:** Daha keskin grafikler için `RasterImagesSavingMode`’u `RasterImagesSavingMode.AsEmbeddedPartsOfPng` olarak ayarlayın. +- **Büyük PDF’ler:** Her sayfayı hafif tutmak için `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` kullanın. + +--- + +## ## Full Working Example – All Three Scenarios in One Project + +Aşağıda üç tekniği yan‑yana gösteren, kendine yeten bir konsol uygulaması bulunuyor. Yeni bir C# konsol projesine kopyalayıp yapıştırın, Aspose.PDF NuGet paketini ekleyin ve dosya yollarını ayarlayın. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Programı çalıştırdığınızda şunları bulacaksınız: + +- `rendered.png` – PDF’nin ilk sayfasının kusursuz görüntüsü. +- `stampAutoFit.pdf` – Dinamik olarak boyutlandırılmış “Important notice” damgası eklenmiş orijinal PDF. +- `cmapHtml.html` (sayfa‑özel HTML dosyalarıyla birlikte) – Orijinal metin kodlamasını koruyan bir HTML sürümü. + +--- + +## ## Frequently Asked Questions (FAQ) + +**S: `AnalyzeFonts` render süresini artırır mı?** +C: Biraz, çünkü Aspose her font akışını tarar. Ancak eksik gliflerin kabul edilemez olduğu karmaşık PDF’ler için bu takas genellikle değerli bir zaman harcamasıdır. + +**S: Bir döngüde birden fazla sayfayı render edebilir miyim?** +C: Kesinlikle. `sourcePdf.Pages` üzerinde döngü kurup `pngDevice.Process(page, $"page{page.Number}.png")` çağrısı yapabilirsiniz. Sayfaları ayrı ayrı açıyorsanız her `Document`’i yok etmeyi unutmayın. + +**S: Eğer + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} + +Provide ONLY the translated content, no explanations. \ 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 0d2073418..21561bdb2 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. +### [Chuyển đổi PDF sang HTML và Xác minh Chữ ký PDF – Hướng dẫn đầy đủ Aspose .NET](./convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/) +Hướng dẫn chi tiết cách chuyển PDF sang HTML và kiểm tra chữ ký PDF bằng Aspose.PDF cho .NET, bao gồm mã mẫu và các bước thực hiện. + ## 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/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md b/pdf/vietnamese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md new file mode 100644 index 000000000..0df3bcb4f --- /dev/null +++ b/pdf/vietnamese/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/_index.md @@ -0,0 +1,259 @@ +--- +category: general +date: 2026-04-02 +description: Chuyển đổi PDF sang HTML trong khi giữ nguyên vector, sau đó xác thực + chữ ký PDF bằng Aspose PDF. Học cách chuyển đổi PDF bằng Aspose và kiểm tra chữ + ký số của PDF trong C#. +draft: false +keywords: +- convert pdf to html +- verify pdf signature +- check pdf digital signature +- aspose pdf conversion +- pdf signature verification +language: vi +og_description: Chuyển đổi PDF sang HTML trong khi giữ nguyên vector và xác minh chữ + ký PDF với Aspose PDF. Mã C# từng bước, mẹo và xử lý các trường hợp đặc biệt. +og_title: Chuyển đổi PDF sang HTML & Xác minh chữ ký PDF – Hướng dẫn đầy đủ Aspose + .NET +tags: +- Aspose.PDF +- C# +- PDF processing +title: Chuyển đổi PDF sang HTML và Xác minh chữ ký PDF – Hướng dẫn đầy đủ Aspose .NET +url: /vi/net/conversion-export/convert-pdf-to-html-and-verify-pdf-signature-full-aspose-net/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Chuyển PDF sang HTML và Xác Thực Chữ Ký PDF – Hướng Dẫn Đầy Đủ Aspose .NET + +Bạn đã bao giờ cần **chuyển PDF sang HTML** nhưng lo lắng về việc mất chất lượng vector hoặc làm hỏng chữ ký số? Bạn không phải là người duy nhất. Nhiều nhà phát triển gặp khó khăn khi PDF chỉ chứa đồ họa vector hoặc chữ ký số dựa trên SHA‑3 — các công cụ chuyển đổi thông thường hoặc raster hoá toàn bộ hoặc bỏ qua hoàn toàn chữ ký. + +Trong hướng dẫn này, chúng ta sẽ thực hiện một giải pháp thực tế bằng **Aspose.Pdf** cho .NET: đầu tiên loại bỏ các ảnh raster trong khi chuyển PDF chỉ có vector sang HTML sạch, sau đó chúng ta sẽ chỉ cho bạn cách **xác thực chữ ký PDF** (đúng, chữ ký SHA‑3‑256) và hiển thị kết quả trên console. Khi hoàn thành, bạn sẽ có một chương trình C# sẵn sàng chạy thực hiện cả hai nhiệm vụ, cùng một số mẹo để tránh các bẫy thường gặp. + +## Những Điều Cần Chuẩn Bị + +- **Aspose.Pdf for .NET** (phiên bản mới nhất tính đến 2026‑04, ví dụ 23.12). +- Môi trường phát triển .NET (Visual Studio 2022 hoặc VS Code với extension C#). +- Hai file PDF mẫu: + 1. `vectorOnly.pdf` – chỉ chứa vector và văn bản, không có ảnh raster. + 2. `signed_sha3.pdf` – được ký số bằng hàm băm SHA‑3‑256. + +Không cần thêm bất kỳ gói NuGet nào ngoài `Aspose.Pdf`. + +--- + +## Bước 1: Tạo Dự Án và Tải PDF + +Tạo một ứng dụng console mới, thêm Aspose.Pdf qua NuGet, và import các namespace cần thiết. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // Paths – adjust to your environment + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + // Load the PDFs + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); +``` + +*Lý do quan trọng*: Tải tài liệu ngay từ đầu cho phép chúng ta tái sử dụng các đối tượng cho cả việc chuyển đổi và xác thực chữ ký, giảm thiểu việc tiêu tốn bộ nhớ. + +--- + +## Bước 2: Chuyển PDF sang HTML Trong Khi Bỏ Qua Ảnh Raster + +`HtmlSaveOptions` của Aspose.Pdf cho phép bạn kiểm soát chi tiết cách xử lý ảnh. Đặt `RasterImagesSavingMode` thành `Skip` sẽ khiến thư viện bỏ qua hoàn toàn các ảnh raster — lý tưởng cho nguồn PDF chỉ có vector. + +```csharp + // Configure HTML save options to keep vectors/text only + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + + // Destination HTML file + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + + // Perform the conversion + vectorDoc.Save(htmlOutputPath, htmlOptions); + + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); +``` + +**Kết quả mong đợi**: +``` +✅ PDF converted to HTML (vectors only): C:\MyProject\noImages.html +``` + +*Mẹo*: Nếu sau này bạn cần nhúng HTML vào một trang web, file được tạo chỉ chứa SVG và CSS — không có các khối PNG/JPEG nặng. + +--- + +## Bước 3: Chuẩn Bị Trình Xử Lý Chữ Ký + +Lớp `PdfFileSignature` của Aspose.Pdf là điểm khởi đầu cho mọi công việc liên quan đến chữ ký số. Nó đọc dictionary chữ ký, trích xuất tên, và cho phép bạn xác thực bằng một thuật toán băm cụ thể. + +```csharp + // Create a signature handler for the signed PDF + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); +``` + +*Tại sao bước này quan trọng*: Nếu không có trình xử lý, bạn không thể liệt kê các chữ ký hoặc chọn thuật toán băm cần thiết (ví dụ SHA‑3‑256). + +--- + +## Bước 4: Duyệt và Xác Thực Mỗi Chữ Ký Bằng SHA‑3‑256 + +Phương thức `GetSignNames()` trả về mọi nhãn chữ ký trong PDF. Duyệt qua chúng, gọi `VerifySignature` với `DigestHashAlgorithm.Sha3_256`, và in kết quả ra console. + +```csharp + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // Keep console open + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Ví dụ đầu ra console**: + +``` +--- Verifying PDF Signatures (SHA‑3‑256) --- +Signature1 valid (SHA‑3‑256): True +Signature2 valid (SHA‑3‑256): False +Process completed. Press any key to exit... +``` + +*Trường hợp đặc biệt*: Nếu một chữ ký sử dụng thuật toán băm khác (ví dụ SHA‑256) thì kết quả xác thực sẽ trả về `False`. Bạn có thể thêm kiểm tra dự phòng bằng cách thử các giá trị `DigestHashAlgorithm` khác trong vòng lặp. + +--- + +## Bước 5: Ví Dụ Hoàn Chỉnh (Tất Cả Mã Nguồn Trong Một File) + +Dưới đây là chương trình đầy đủ mà bạn có thể sao chép‑dán vào `Program.cs`. Thay `YOUR_DIRECTORY` bằng thư mục thực tế chứa các file PDF của bạn. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Security; + +namespace PdfProcessingDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load PDFs + // ----------------------------------------------------------------- + string vectorPdfPath = @"YOUR_DIRECTORY\vectorOnly.pdf"; + string signedPdfPath = @"YOUR_DIRECTORY\signed_sha3.pdf"; + + PdfDocument vectorDoc = new PdfDocument(vectorPdfPath); + PdfDocument signedDoc = new PdfDocument(signedPdfPath); + + // ----------------------------------------------------------------- + // 2️⃣ Convert PDF → HTML (skip raster images) + // ----------------------------------------------------------------- + HtmlSaveOptions htmlOptions = new HtmlSaveOptions + { + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip + }; + string htmlOutputPath = @"YOUR_DIRECTORY\noImages.html"; + vectorDoc.Save(htmlOutputPath, htmlOptions); + Console.WriteLine($"✅ PDF converted to HTML (vectors only): {htmlOutputPath}"); + + // ----------------------------------------------------------------- + // 3️⃣ Set up signature verification + // ----------------------------------------------------------------- + PdfFileSignature signatureHandler = new PdfFileSignature(signedDoc); + Console.WriteLine("\n--- Verifying PDF Signatures (SHA‑3‑256) ---"); + + foreach (string signName in signatureHandler.GetSignNames()) + { + bool isValid = signatureHandler.VerifySignature(signName, DigestHashAlgorithm.Sha3_256); + Console.WriteLine($"{signName} valid (SHA‑3‑256): {isValid}"); + } + + // ----------------------------------------------------------------- + // 4️⃣ Finish + // ----------------------------------------------------------------- + Console.WriteLine("\nProcess completed. Press any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +Chạy chương trình (`dotnet run` hoặc nhấn **F5** trong Visual Studio). Bạn sẽ thấy thông báo xác nhận chuyển đổi tiếp theo là kết quả xác thực chữ ký. + +--- + +## Các Câu Hỏi Thường Gặp & Cách Giải Quyết + +| Câu hỏi | Trả lời | +|----------|--------| +| **HTML có vẫn chứa các phông chữ gốc không?** | Aspose.Pdf nhúng các phông chữ được dùng dưới dạng base‑64 data URIs theo mặc định, vì vậy đầu ra sẽ hiển thị đúng ngay cả khi máy chủ không có các phông chữ đó. | +| **Nếu PDF của tôi có cả vector *và* ảnh thì sao?** | Giữ `RasterImagesSavingMode = Skip` để loại bỏ ảnh, hoặc chuyển sang `EmbedAll` nếu bạn cần chúng. Tùy chọn này áp dụng cho mỗi lần chuyển đổi, vì vậy bạn có thể thực hiện hai lượt nếu cần cả hai phiên bản. | +| **Chữ ký của tôi dùng SHA‑512 — làm sao xác thực?** | Thay `DigestHashAlgorithm.Sha3_256` bằng `DigestHashAlgorithm.Sha512`. Bạn thậm chí có thể phát hiện thuật toán từ dictionary chữ ký và chọn động. | +| **Có cách lấy thông tin chứng chỉ của người ký không?** | Có. Sau khi xác thực, gọi `signatureHandler.GetSignatureInfo(signName).Certificate` để lấy chứng chỉ X.509 và kiểm tra các trường như `Subject` và `Issuer`. | +| **Nếu PDF được bảo vệ bằng mật khẩu thì sao?** | Tải nó bằng `PdfDocument pdf = new PdfDocument(path, new LoadOptions { Password = "myPwd" })`. Các bước còn lại vẫn giữ nguyên. | + +--- + +## Mẹo Cho Mã Sẵn Sàng Sản Xuất + +1. **Giải phóng PDF đúng cách** – Đặt các đối tượng `PdfDocument` trong khối `using` hoặc gọi `Dispose()` để giải phóng tài nguyên gốc. +2. **Xử lý hàng loạt** – Nếu có hàng chục PDF, duyệt qua một thư mục, lưu kết quả vào CSV, và song song hoá chuyển đổi bằng `Parallel.ForEach`. +3. **Ghi log** – Thay `Console.WriteLine` bằng một logger có cấu trúc (Serilog, NLog) để dễ truy vết, đặc biệt khi xác thực nhiều chữ ký. +4. **Xử lý lỗi** – Bắt `Aspose.Pdf.Exceptions` để xử lý các file hỏng một cách nhẹ nhàng: + + ```csharp + try { /* conversion or verification */ } + catch (Aspose.Pdf.Exceptions.PdfException ex) + { + Console.Error.WriteLine($"Error processing {path}: {ex.Message}"); + } + ``` + +5. **Tương thích phiên bản** – Aspose.Pdf phát triển nhanh. Luôn kiểm tra với đúng phiên bản được khai báo trong `csproj`. API ở đây hoạt động với 23.x trở lên. + +--- + +## Kết Luận + +Chúng ta vừa **chuyển PDF sang HTML** trong khi chỉ giữ lại vector và văn bản, và **xác thực chữ ký PDF** bằng thuật toán SHA‑3‑256 — tất cả chỉ với vài dòng C#. Những điểm chính cần nhớ là: + +- Dùng `HtmlSaveOptions.RasterImagesSavingMode = Skip` để có HTML chỉ chứa vector. +- Sử dụng `PdfFileSignature` và `DigestHashAlgorithm.Sha3_256` để **kiểm tra chữ ký số PDF** một cách đáng tin cậy. + +Từ đây, bạn có thể khám phá các chủ đề liên quan như **aspose pdf conversion** sang PNG, trích xuất file nhúng, hoặc xây dựng dịch vụ web nhận PDF và trả về đoạn HTML đã xác thực. + +Hãy thử, tùy chỉnh các tùy chọn, và cho chúng tôi biết bạn khám phá được gì. Chúc lập trình vui vẻ! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/digital-signatures/_index.md b/pdf/vietnamese/net/digital-signatures/_index.md index 4eda08eeb..f4da6cc54 100644 --- a/pdf/vietnamese/net/digital-signatures/_index.md +++ b/pdf/vietnamese/net/digital-signatures/_index.md @@ -35,6 +35,9 @@ Tìm hiểu cách tạo, ký và xác minh chữ ký PDF an toàn bằng 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](./extract-pdf-signature-info-aspose-pdf-net/) Tìm hiểu cách trích xuất thông tin chữ ký số từ PDF bằng Aspose.PDF cho .NET. Hướng dẫn từng bước này bao gồm cài đặt, triển khai và ứng dụng thực tế. +### [Cách trích xuất chữ ký từ PDF – Hướng dẫn Aspose C#](./how-to-extract-signatures-from-pdf-aspose-c-guide/) +Hướng dẫn chi tiết cách trích xuất các chữ ký số từ tài liệu PDF bằng Aspose.PDF trong C#. + ### [Cách triển khai chữ ký số trong .NET với Aspose.PDF: Hướng dẫn toàn diện](./implement-pdf-signatures-dotnet-aspose-pdf-guide/) Tìm hiểu cách triển khai chữ ký số an toàn trên tệp PDF bằng Aspose.PDF cho .NET, bao gồm cả việc loại bỏ các trường tùy chọn. @@ -58,12 +61,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. +### [Xác thực chữ ký PDF và Thêm số Bates – Hướng dẫn C# đầy đủ](./verify-pdf-signature-and-add-bates-numbering-complete-c-guid/) +Hướng dẫn chi tiết cách xác thực chữ ký PDF và thêm số Bates vào tài liệu bằng C# với 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/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md b/pdf/vietnamese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md new file mode 100644 index 000000000..79866ce0f --- /dev/null +++ b/pdf/vietnamese/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/_index.md @@ -0,0 +1,249 @@ +--- +category: general +date: 2026-04-02 +description: Tìm hiểu cách trích xuất chữ ký, thêm trường, thêm trang trắng PDF, cách + thêm widget và giữ nguyên độ trong suốt của PDF bằng Aspose.Pdf trong C#. +draft: false +keywords: +- how to extract signatures +- how to add field +- add blank page pdf +- how to add widget +- preserve transparency pdf +language: vi +og_description: Cách trích xuất chữ ký từ PDF và thực hiện các tác vụ liên quan như + thêm trường, trang trắng, widget và giữ nguyên độ trong suốt bằng Aspose.Pdf. +og_title: Cách trích xuất chữ ký từ PDF – Hướng dẫn Aspose C# +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Cách Trích Xuất Chữ Ký từ PDF – Hướng Dẫn Aspose C# +url: /vi/net/digital-signatures/how-to-extract-signatures-from-pdf-aspose-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách Trích Xuất Chữ Ký từ PDF – Hướng Dẫn Aspose C# + +**Cách trích xuất chữ ký từ PDF** là một yêu cầu phổ biến khi bạn tự động hoá quy trình xử lý hợp đồng, phê duyệt hoá đơn, hoặc bất kỳ luồng công việc nào dựa vào chữ ký số. +Trong hướng dẫn này chúng tôi cũng sẽ trình bày **cách thêm trường**, **thêm trang trắng PDF**, **cách thêm widget**, và **giữ nguyên tính trong suốt của PDF** bằng thư viện Aspose.Pdf cho .NET. + +Hãy tưởng tượng bạn nhận được hàng chục PDF đã ký mỗi đêm; việc mở từng file để kiểm tra chữ ký bằng tay sẽ là một cơn ác mộng. Chỉ với vài dòng code C# bạn có thể lập trình lấy tên chữ ký, giữ nguyên đồ họa gốc, và thậm chí bổ sung các trường biểu mẫu mới—tất cả mà không làm mất tính trong suốt hay hồ sơ màu hiện có. + +> **Bạn sẽ nhận được:** một ví dụ hoàn chỉnh, có thể chạy được, chuyển đổi PDF sang PDF/X‑4 (giữ tính trong suốt), trích xuất mọi tên chữ ký được nhúng, thêm một trang trắng, và tạo một trường textbox xuất hiện ở hai vị trí trên cùng một trang. + +## Điều Kiện Tiên Quyết + +- .NET 6.0 trở lên (code cũng hoạt động với .NET Framework) +- Aspose.Pdf for .NET **v25.2** hoặc mới hơn (cần thiết cho `GetSignatureNames()`) +- Một dự án Visual Studio hoặc bất kỳ IDE C# nào +- Ba file PDF mẫu trong một thư mục bạn kiểm soát: + - `source.pdf` – bất kỳ PDF nào bạn muốn chuyển đổi trong khi giữ tính trong suốt + - `signed.pdf` – một PDF đã chứa chữ ký số + - (tùy chọn) một thư mục trống để lưu các file đầu ra + +> **Mẹo chuyên nghiệp:** Nếu bạn chưa có bản sao có giấy phép, có thể yêu cầu giấy phép tạm thời miễn phí từ trang web của Aspose. Chế độ miễn phí hoạt động cho việc thử nghiệm nhưng sẽ thêm watermark. + +## Bước 1 – Giữ Tính Trong Suốt PDF bằng Cách Chuyển Đổi sang PDF/X‑4 + +Tính trong suốt và các hồ sơ màu được nhúng thường bị mất khi bạn flatten một PDF. Chuyển đổi sang **PDF/X‑4** giữ nguyên các yếu tố hình ảnh này, điều rất quan trọng đối với các tài liệu sẵn sàng in. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +// 1️⃣ Convert source.pdf → PDF/X‑4 (preserves transparency & color profiles) +var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, // Target format + ConvertErrorAction.Delete // Remove pages that cause conversion errors +); + +using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) +{ + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); +} +``` + +**Tại sao điều này quan trọng:** +PDF/X‑4 là tiêu chuẩn ISO cho các PDF trao đổi đồ họa giữ được tính trong suốt động. Bằng cách sử dụng `PdfFormatConversionOptions`, bạn tránh được lỗi thường gặp khi raster hoá các đối tượng trong suốt, điều có thể làm tăng đáng kể kích thước file và giảm chất lượng. + +## Bước 2 – Cách Trích Xuất Chữ Ký từ PDF + +Aspose đã giới thiệu `GetSignatureNames()` trong phiên bản 25.2, cho phép trích xuất chữ ký chỉ bằng một dòng lệnh. Phương thức này trả về một mảng các tên logic được gán cho mỗi trường chữ ký số. + +```csharp +using Aspose.Pdf; + +// 2️⃣ Pull out every signature name from signed.pdf +using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) +{ + // Returns strings like "Signature1", "EmployeeSignature", etc. + string[] signatureNames = signedDoc.GetSignatureNames(); // new method in 25.2 + + // Show the names in the console – you could store them in a DB instead + Console.WriteLine("Found signatures: " + string.Join(", ", signatureNames)); +} +``` + +**Kết quả mong đợi:** Nếu `signed.pdf` chứa hai chữ ký có tên *ManagerSig* và *ClientSig*, console sẽ in: + +``` +Found signatures: ManagerSig, ClientSig +``` + +**Xử lý trường hợp biên:** +- Nếu PDF không có chữ ký, `GetSignatureNames()` trả về một mảng rỗng – không có ngoại lệ nào được ném. +- Đối với các PDF có trường chữ ký bị hỏng, bạn có thể bao bọc lời gọi trong `try/catch` và ghi lại lỗi mà không dừng toàn bộ quá trình. + +## Bước 3 – Thêm Trang Trắng PDF và Tạo TextBox với Nhiều Widget + +Thêm một trang mới rất đơn giản, nhưng **cách thêm trường** và **cách thêm widget** cùng lúc đòi hỏi một chút tinh tế. Một *widget* là phần hiển thị trực quan của một trường biểu mẫu; bạn có thể gắn nhiều widget vào cùng một trường logic, cho phép cùng một dữ liệu xuất hiện ở nhiều vị trí. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; + +// 3️⃣ Build a fresh document, add a blank page, then a textbox with two widgets +using (var newDoc = new Document()) +{ + // ---- Add a blank page ------------------------------------------------- + var page = newDoc.Pages.Add(); // This is the "add blank page pdf" step + + // ---- Define the primary widget (the actual appearance) --------------- + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", // logical name of the field + Value = "Enter your comment here" // default value + }; + + // ---- Add a second widget at a different location ---------------------- + var secondWidget = new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550)); + textBox.Widgets.Add(secondWidget); // This is the "how to add widget" part + + // ---- Register the field with the document's form collection ----------- + newDoc.Form.Add(textBox, "Comments"); + + // ---- Save the result -------------------------------------------------- + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); +} +``` + +**Tại sao lại dùng nhiều widget?** +Giả sử bạn muốn cùng một bình luận xuất hiện ở mặt trước và mặt sau của hợp đồng. Bằng cách gắn hai widget vào cùng một trường, bất kỳ thay đổi nào người dùng thực hiện ở một vị trí sẽ tự động cập nhật vị trí còn lại. + +**Những lỗi thường gặp:** +- Quên thêm trường vào `newDoc.Form` sẽ khiến widget không hiển thị trong các trình xem PDF. +- Sử dụng cùng một tọa độ hình chữ nhật cho cả hai widget sẽ làm chúng chồng lên nhau—hãy chắc chắn các giá trị `Rectangle` khác nhau. + +## Bước 4 – Kết Hợp Tất Cả: Một Ví Dụ Đầy Đủ, Có Thể Chạy + +Dưới đây là một chương trình duy nhất thực hiện mọi bước theo thứ tự đã trình bày. Sao chép‑dán vào một dự án console mới, điều chỉnh đường dẫn, và chạy. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using Aspose.Pdf.Forms; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Preserve transparency by converting to PDF/X‑4 + // ----------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions( + PdfFormat.PDF_X_4, + ConvertErrorAction.Delete); + + using (var sourceDoc = new Document("YOUR_DIRECTORY/source.pdf")) + { + sourceDoc.Convert(conversionOptions); + sourceDoc.Save("YOUR_DIRECTORY/toPdfX4.pdf"); + Console.WriteLine("✅ PDF/X‑4 conversion complete (transparency preserved)."); + } + + // ----------------------------------------------------------------- + // 2️⃣ Extract signature names + // ----------------------------------------------------------------- + using (var signedDoc = new Document("YOUR_DIRECTORY/signed.pdf")) + { + string[] signatureNames = signedDoc.GetSignatureNames(); // new in 25.2 + if (signatureNames.Length == 0) + Console.WriteLine("⚠️ No signatures found."); + else + Console.WriteLine("🔍 Found signatures: " + string.Join(", ", signatureNames)); + } + + // ----------------------------------------------------------------- + // 3️⃣ Add a blank page and a textbox with two widgets + // ----------------------------------------------------------------- + using (var newDoc = new Document()) + { + // Add a blank page – “add blank page pdf” + var page = newDoc.Pages.Add(); + + // Primary widget for the textbox + var textBox = new TextBoxField(page, new Rectangle(100, 600, 300, 650)) + { + PartialName = "Comments", + Value = "Enter your comment here" + }; + + // Second widget – “how to add widget” + textBox.Widgets.Add(new WidgetAnnotation(page, new Rectangle(100, 500, 300, 550))); + + // Register the field – “how to add field” + newDoc.Form.Add(textBox, "Comments"); + + // Save the final document + newDoc.Save("YOUR_DIRECTORY/TextBoxMultipleWidgets.pdf"); + Console.WriteLine("✅ Blank page added and textbox with two widgets created."); + } + + Console.WriteLine("\nAll tasks completed successfully!"); + } + } +} +``` + +### Kết Quả Dự Kiến + +Khi bạn chạy chương trình, bạn sẽ thấy đầu ra tương tự như: + +``` +✅ PDF/X‑4 conversion complete (transparency preserved). +🔍 Found signatures: ManagerSig, ClientSig +✅ Blank page added and textbox with two widgets created. + +All tasks completed successfully! +``` + +Mở `TextBoxMultipleWidgets.pdf` trong Adobe Acrobat Reader; bạn sẽ thấy hai hộp văn bản giống hệt nhau mang nhãn **Comments**—một ở phía trên, một hơi thấp hơn. Gõ vào một hộp sẽ cập nhật ngay lập tức hộp còn lại. + +## Câu Hỏi Thường Gặp (FAQ) + +| Câu hỏi | Trả lời | +|----------|--------| +| **Tôi có thể trích xuất byte chữ ký thực tế không?** | `GetSignatureNames()` chỉ trả về tên logic. Để lấy chứng chỉ hoặc giá trị chữ ký, bạn cần các đối tượng `SignatureField` (`document.Form["fieldName"] as SignatureField`). | +| **Chuyển đổi PDF/X‑4 có hoạt động với PDF được mã hoá không?** | Có, miễn là bạn cung cấp mật khẩu qua `Document.Open(file, password)`. | +| **Nếu tôi cần hơn hai widget thì sao?** | Chỉ cần gọi `textBox.Widgets.Add()` cho mỗi `WidgetAnnotation` bổ sung. | +| **Trang trắng sẽ kế thừa kích thước trang từ PDF gốc không?** | Trang mới sử dụng kích thước mặc định (A4). Bạn có thể truyền một đối tượng `Page` với kích thước tùy chỉnh nếu cần. | +| **Mã có tương thích với .NET Core không?** | Hoàn toàn—Aspose.Pdf hỗ trợ đa nền tảng. Chỉ cần tham chiếu gói NuGet trong dự án .NET Core của bạn. | + +## Kết Luận + +Trong tutorial này chúng tôi đã trình bày **cách trích xuất chữ ký từ PDF**, đồng thời bao quát **cách thêm trường**, **thêm trang trắng PDF**, **cách thêm widget**, và **giữ tính trong suốt PDF** bằng Aspose.Pdf cho C#. Giờ đây bạn đã có một giải pháp toàn diện, đầu cuối, có thể tích hợp vào bất kỳ pipeline xử lý tài liệu nào. + +Sẵn sàng cho thử thách tiếp theo? Hãy thử kết hợp các kỹ thuật này với mô-đun OCR của Aspose để đọc văn bản từ tài liệu quét + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md b/pdf/vietnamese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md new file mode 100644 index 000000000..00b062906 --- /dev/null +++ b/pdf/vietnamese/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/_index.md @@ -0,0 +1,223 @@ +--- +category: general +date: 2026-04-02 +description: Xác minh chữ ký PDF nhanh chóng và học cách thêm đánh số Bates bằng Aspose.Pdf. + Bao gồm mã từng bước và các mẹo. +draft: false +keywords: +- verify pdf signature +- add bates numbering +- how to verify signature +- how to add bates +- check pdf signature +language: vi +og_description: Xác thực chữ ký PDF nhanh chóng và tìm hiểu cách thêm số Bates bằng + Aspose.Pdf. Thực hiện đầy đủ ví dụ và tránh các sai lầm phổ biến. +og_title: Xác minh chữ ký PDF và Thêm số Bates – Hướng dẫn C# đầy đủ +tags: +- Aspose.Pdf +- C# +- Digital Signature +- Document Automation +title: Xác minh chữ ký PDF và Thêm số Bates – Hướng dẫn C# đầy đủ +url: /vi/net/digital-signatures/verify-pdf-signature-and-add-bates-numbering-complete-c-guid/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Xác minh chữ ký PDF và Thêm số Bates – Hướng dẫn đầy đủ C# + +Bạn đã bao giờ cần **verify PDF signature** trước khi gửi hợp đồng, nhưng không chắc gọi API nào nên dùng? Bạn không cô đơn—nhiều nhà phát triển gặp khó khăn này khi xử lý các PDF có tính pháp lý. Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách **verify PDF signature** bằng Aspose.Pdf và sau đó cho bạn **how to add bates numbering** để các tệp của bạn luôn sẵn sàng kiểm toán. + +Chúng tôi cũng sẽ đề cập đến **how to verify signature** một cách lập trình, trình bày **how to add bates** trong một lần chạy, và giải thích kết quả **check pdf signature** để bạn có thể tin tưởng vào đầu ra. Khi kết thúc, bạn sẽ có một ứng dụng console C# có thể chạy được thực hiện cả hai nhiệm vụ—không có bí ẩn, chỉ có mã rõ ràng. + +--- + +## Những gì bạn cần + +- **.NET 6.0** hoặc mới hơn (ví dụ này cũng hoạt động với .NET Framework 4.7+). +- **Aspose.Pdf for .NET** gói NuGet (phiên bản 23.11 hoặc mới hơn). +- Một tệp PDF đã ký (`signed.pdf`) mà bạn muốn xác thực. +- Một tệp PDF thường (`input.pdf`) sẽ nhận số Bates. + +Nếu bạn đã có những thứ trên, bạn đã sẵn sàng. Không cần SDK bổ sung, không có tệp cấu hình ẩn. + +--- + +## Bước 1: Thiết lập dự án + +Bắt đầu bằng cách tạo một dự án console: + +```bash +dotnet new console -n PdfSignatureAndBatesDemo +cd PdfSignatureAndBatesDemo +dotnet add package Aspose.Pdf +``` + +Mở `Program.cs` và xóa mã mặc định. Chúng tôi sẽ xây dựng mọi thứ từ đầu để bạn có thể sao chép‑dán phiên bản cuối cùng sau này. + +--- + +## Bước 2: Xác minh chữ ký PDF + +### Tại sao việc xác minh lại quan trọng + +Một chữ ký số có thể bị **compromised** nếu chứng chỉ gốc bị thu hồi hoặc tài liệu bị thay đổi sau khi ký. Aspose.Pdf cung cấp cho chúng ta phương thức tiện lợi `IsSignatureCompromised` trả về một giá trị boolean—đơn giản, nhưng đủ mạnh cho hầu hết các quy trình kiểm toán. + +### Đoạn mã mẫu + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; + +namespace PdfSignatureAndBatesDemo +{ + class Program + { + static void Main(string[] args) + { + // ---------- Verify PDF Signature ---------- + string signedPdfPath = @"YOUR_DIRECTORY\signed.pdf"; + + // Load the signed document inside a using block to ensure disposal + using (Document signedDoc = new Document(signedPdfPath)) + using (PdfFileSignature pdfSignature = new PdfFileSignature(signedDoc)) + { + // The name "Signature1" is the default for the first signature. + // Change it if your PDF uses a custom field name. + bool isCompromised = pdfSignature.IsSignatureCompromised("Signature1"); + + Console.WriteLine($"Signature compromised: {isCompromised}"); + // Expected output: "Signature compromised: False" if everything is fine. + } + + // The rest of the program (Bates numbering) continues below... +``` + +**Giải thích** + +- `Document` tải PDF vào bộ nhớ. +- `PdfFileSignature` bao bọc tài liệu và cung cấp các phương thức liên quan đến chữ ký. +- `IsSignatureCompromised("Signature1")` kiểm tra tính toàn vẹn của chữ ký có tên *Signature1*. +- Kết quả boolean cho bạn biết chữ ký còn đáng tin cậy hay không. + +> **Mẹo:** Nếu bạn không chắc tên trường chữ ký, hãy gọi `pdfSignature.GetSignatureNames()` trước; nó sẽ trả về danh sách tất cả các định danh chữ ký. + +--- + +## Bước 3: Chuẩn bị tùy chọn số Bates + +### Số Bates là gì? + +Số Bates là các định danh tuần tự được in trên mỗi trang của tài liệu pháp lý hoặc pháp y. Chúng giúp việc tham chiếu các trang trở nên dễ dàng trong quá trình khám phá hoặc kiểm toán. `BatesNumberingOptions` của Aspose.Pdf cho phép bạn tùy chỉnh tiền tố, số bắt đầu, số chữ số, căn chỉnh và lề—tất cả trong một đối tượng. + +### Tiếp tục đoạn mã + +```csharp + // ---------- Configure Bates Numbering ---------- + string sourcePdfPath = @"YOUR_DIRECTORY\input.pdf"; + using (Document pdfWithBates = new Document(sourcePdfPath)) + { + // Set up the numbering style + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + Prefix = "INV-", // Anything before the numeric part + StartNumber = 1000, // First number to use + NumberOfDigits = 5, // Pads numbers with leading zeros (e.g., 01000) + Alignment = HorizontalAlignment.Right, + BottomMargin = 20 // Distance from the bottom edge (points) + }; + + // Apply the numbering to every page in the document + pdfWithBates.AddBatesNumbering(batesOptions); + + // Save the newly numbered PDF + string outputPdfPath = @"YOUR_DIRECTORY\BatesNumbered.pdf"; + pdfWithBates.Save(outputPdfPath); + + Console.WriteLine($"Bates numbering added. File saved to: {outputPdfPath}"); + // Expected output: "Bates numbering added. File saved to: ...\BatesNumbered.pdf" + } + } + } +} +``` + +**Giải thích** + +- `BatesNumberingOptions` tập trung tất cả các lựa chọn định dạng. +- `AddBatesNumbering` tự động lặp qua mỗi trang—không cần vòng lặp thủ công. +- `Prefix` (`INV-`) và `StartNumber` (1000) tạo ra các nhãn như `INV-01000`, `INV-01001`, v.v. +- Điều chỉnh `BottomMargin` nếu bạn muốn số xuất hiện cao hơn hoặc thấp hơn trên trang. + +--- + +## Bước 4: Chạy ví dụ hoàn chỉnh + +Lưu tệp, sau đó thực thi: + +```bash +dotnet run +``` + +Bạn sẽ thấy hai dòng trên console: + +``` +Signature compromised: False +Bates numbering added. File saved to: YOUR_DIRECTORY\BatesNumbered.pdf +``` + +Nếu dòng đầu tiên in ra `True`, chữ ký bị compromised—nghĩa là tài liệu có thể đã bị thay đổi sau khi ký hoặc chứng chỉ không còn hợp lệ. Trong trường hợp đó, hãy dừng mọi xử lý tiếp theo. + +--- + +## Bước 5: Các trường hợp góc cạnh phổ biến & Cách xử lý + +| Tình huống | Điều cần chú ý | Cách khắc phục | +|-----------|-------------------|---------------| +| **Nhiều chữ ký** | `IsSignatureCompromised` chỉ kiểm tra một trường mỗi lần. | Lặp qua `pdfSignature.GetSignatureNames()` và xác minh từng cái. | +| **Tên trường chữ ký tùy chỉnh** | Sử dụng `"Signature1"` có thể gây ngoại lệ nếu tên khác. | Lấy danh sách tên trước, hoặc truyền tên chính xác bạn thấy trong Acrobat. | +| **PDF lớn (hơn 100 trang)** | Thêm số Bates có thể tốn nhiều bộ nhớ. | Sử dụng `Document.Save` với `SaveOptions` cho phép streaming (`PdfSaveOptions { Compress = true }`). | +| **Ký tự không phải Latin trong tiền tố** | Một số phông chữ không hỗ trợ Unicode mặc định. | Đặt `pdfWithBates.Font` thành phông chữ hỗ trợ Unicode như `Arial Unicode MS`. | +| **Cần đặt số ở phía trái** | Căn chỉnh được mã cố định thành `Right`. | Thay đổi `Alignment = HorizontalAlignment.Left` trong `BatesNumberingOptions`. | + +--- + +## Bước 6: Xác minh kết quả thủ công (Tùy chọn) + +Mở `BatesNumbered.pdf` trong bất kỳ trình xem PDF nào: + +1. Lướt qua các trang—mỗi trang nên hiển thị nhãn như **INV‑01000** ở góc dưới‑phải. +2. Sử dụng **Signature Panel** của Acrobat để nhấp đúp vào chữ ký và xác nhận trạng thái khớp với đầu ra trên console. + +Nếu mọi thứ khớp nhau, bạn đã thành công **check pdf signature** và áp dụng **add bates numbering** trong một lần. + +--- + +## Câu hỏi thường gặp + +**Q: Tôi có thể xác minh chữ ký mà không tải toàn bộ tài liệu không?** +A: Aspose.Pdf stream tệp ngầm, nhưng bạn vẫn cần một thể hiện `Document`. Đối với các tệp lớn, hãy cân nhắc sử dụng trực tiếp `PdfFileSignature` với một luồng tệp để giảm lượng bộ nhớ. + +**Q: Tôi có cần giấy phép cho Aspose.Pdf không?** +A: Bản đánh giá miễn phí hoạt động, nhưng sẽ thêm watermark. Đối với môi trường production, bạn cần giấy phép hợp lệ; nếu không các PDF đầu ra sẽ có biểu ngữ Aspose. + +**Q: Nếu tôi chỉ cần thêm số Bates cho một tập hợp trang nào đó thì sao?** +A: Sử dụng `pdfWithBates.AddBatesNumbering(batesOptions, new[] { 1, 3, 5 })` trong đó mảng liệt kê các số trang bạn muốn đánh số. + +--- + +## Kết luận + +Bạn đã biết **how to verify PDF signature** bằng Aspose.Pdf, hiểu ý nghĩa của kết quả boolean, và có thể tự tin **add bates numbering** cho bất kỳ PDF nào bạn kiểm soát. Ví dụ đầy đủ, có thể chạy được kết hợp cả hai nhiệm vụ, cung cấp cho bạn một công cụ console duy nhất để kiểm tra tính xác thực của tài liệu và dán nhãn với các định danh sẵn sàng kiểm toán. + +Tiếp theo, bạn có thể khám phá **how to verify signature** so với kho lưu trữ gốc tin cậy, hoặc thử nghiệm các kiểu **add bates numbering** tùy chỉnh như dấu chéo hoặc tiền tố theo phần. Cả hai chủ đề đều dựa trên nền tảng bạn vừa nắm vững, và chúng sẽ làm cho quy trình xử lý tài liệu của bạn mạnh mẽ hơn. + +Chúc lập trình vui vẻ, và nhớ—kiểm tra chữ ký và đánh số trang sẽ rất dễ dàng khi bạn có mã đúng! 🚀 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/printing-rendering/_index.md b/pdf/vietnamese/net/printing-rendering/_index.md index 58fafe93b..300c8bdd8 100644 --- a/pdf/vietnamese/net/printing-rendering/_index.md +++ b/pdf/vietnamese/net/printing-rendering/_index.md @@ -50,6 +50,9 @@ Tìm hiểu cách in hiệu quả các trang cụ thể của PDF bằng Aspose. ### [Thiết lập Hệ số thu phóng tùy chỉnh trong PDF bằng Aspose.PDF cho .NET - Hướng dẫn đầy đủ](./aspose-pdf-net-set-zoom-factor-pdfs/) Tìm hiểu cách thiết lập hệ số thu phóng tùy chỉnh trong tài liệu PDF bằng Aspose.PDF cho .NET. Hướng dẫn này bao gồm cài đặt, các bước triển khai và ứng dụng thực tế. +### [Cách Render PDF trong C# – Hướng dẫn đầy đủ về PNG, HTML & Đánh dấu](./how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/) +Tìm hiểu cách chuyển đổi PDF sang PNG, HTML và áp dụng dấu (stamp) trong C# bằng Aspose.PDF, kèm ví dụ mã chi tiết. + ## 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/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md b/pdf/vietnamese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md new file mode 100644 index 000000000..0d1180d7c --- /dev/null +++ b/pdf/vietnamese/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-04-02 +description: Cách render PDF bằng Aspose.PDF trong C#. Tìm hiểu cách chuyển PDF sang + PNG, lưu PDF dưới dạng HTML và thêm dấu văn bản tự động điều chỉnh kích thước một + cách hiệu quả. +draft: false +keywords: +- how to render pdf +- save pdf as html +- render pdf to png +- convert pdf page png +- export pdf page image +language: vi +og_description: Cách render PDF bằng Aspose.PDF trong C#. Hướng dẫn này chỉ cách render + PDF sang PNG, lưu dưới dạng HTML và tạo các dấu văn bản tự động vừa kích thước. +og_title: Cách kết xuất PDF trong C# – PNG, HTML & Tem tự điều chỉnh +tags: +- Aspose.PDF +- C# +- PDF processing +title: Cách Render PDF trong C# – Hướng Dẫn Toàn Diện về PNG, HTML & Đánh Dấu +url: /vi/net/printing-rendering/how-to-render-pdf-in-c-complete-guide-to-png-html-stamping/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách Render PDF trong C# – Hướng Dẫn Đầy Đủ về PNG, HTML & Stamping + +Bạn đã bao giờ tự hỏi **cách render PDF** trong một ứng dụng .NET mà không mất một glyph nào chưa? Có thể bạn đã thử nhanh `PdfRenderer` nhưng lại thấy các ký tự bị thiếu, hoặc bạn cần một PNG sắc nét cho ảnh thu nhỏ nhưng kết quả lại răng rối. Theo kinh nghiệm của tôi, việc kết hợp đúng các tùy chọn render và xử lý phông chữ tạo nên sự khác biệt giữa một bản preview bị hỏng và một hình ảnh pixel‑perfect. + +Trong tutorial này, chúng ta sẽ đi qua ba kịch bản thực tế với Aspose.PDF for .NET: render một trang PDF thành PNG đồng thời phân tích phông chữ, thêm một `TextStamp` tự động thay đổi kích thước phông, và lưu PDF dưới dạng HTML bằng bảng CMap của phông. Khi kết thúc, bạn sẽ có thể **render PDF sang PNG**, **chuyển đổi trang PDF thành PNG**, **xuất ảnh trang PDF**, và thậm chí **lưu PDF dưới dạng HTML** một cách trơn tru. + +## Prerequisites + +- .NET 6.0 hoặc mới hơn (code cũng hoạt động trên .NET Framework 4.6+) +- Gói NuGet Aspose.PDF for .NET (`Install-Package Aspose.PDF`) +- Một file PDF có phông chữ phức tạp (ví dụ: `complexFonts.pdf`) để demo render +- Kiến thức cơ bản về C# và Visual Studio (hoặc bất kỳ IDE nào bạn thích) + +> **Pro tip:** Nếu bạn đang chạy trên máy CI, hãy chắc chắn rằng file giấy phép Aspose được nhúng dưới dạng resource hoặc được tham chiếu qua biến môi trường để tránh watermark đánh giá. + +--- + +## ## How to Render PDF to PNG with Font Analysis + +### Why analyze fonts? + +Khi một PDF chứa phông chữ tùy chỉnh hoặc được nhúng, việc render một cách ngây thơ có thể bỏ lỡ các glyph mà renderer không thể ánh xạ. Bật `AnalyzeFonts` buộc Aspose kiểm tra các luồng phông chữ và thay thế các glyph thiếu, đảm bảo hình ảnh trung thực. + +### Step‑by‑step implementation + +1. **Tạo một `PngDevice` với `AnalyzeFonts` được bật.** +2. **Tải PDF nguồn** bằng cách sử dụng `Document`. +3. **Xử lý trang mong muốn** và ghi PNG ra đĩa. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +// 1️⃣ Set up a PNG device that will analyze fonts +var pngDevice = new PngDevice +{ + RenderingOptions = new RenderingOptions + { + // This flag makes sure no glyph is lost during rendering + AnalyzeFonts = true + } +}; + +// 2️⃣ Load the PDF that contains complex fonts +using (var sourcePdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) +{ + // 3️⃣ Render the first page to a PNG file + pngDevice.Process(sourcePdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); +} +``` + +**What you should see:** Một file tên `rendered.png` trong `YOUR_DIRECTORY` trông giống hệt trang đầu tiên của `complexFonts.pdf`, bao gồm tất cả các ký tự đặc biệt và dấu phụ. + +![Rendered PDF page as PNG image](rendered.png "Rendered PDF page as PNG image") + +#### Common pitfalls & how to avoid them + +- **Missing fonts on the server:** Nếu PDF tham chiếu đến các phông chữ chưa được nhúng, hãy đặt các phông chữ đó vào đường dẫn tìm kiếm của ứng dụng hoặc bật `FontRepository` để chỉ tới thư mục tùy chỉnh. +- **Large PDFs:** Render nhiều trang trong một vòng lặp có thể tiêu tốn bộ nhớ; hãy giải phóng mỗi instance `Document` kịp thời hoặc sử dụng khối `using` như trong ví dụ. + +--- + +## ## Adding an Auto‑Fit TextStamp (Render PDF with Dynamic Text) + +### When would you need a dynamically sized stamp? + +Hãy tưởng tượng bạn tạo hoá đơn và cần phủ một watermark “PAID” vừa vặn với bất kỳ hình chữ nhật nào bạn chọn, bất kể độ dài văn bản. Tính toán kích thước phông chữ thủ công dễ gây lỗi; `AutoAdjustFontSizeToFitStampRectangle` của Aspose sẽ làm phần việc nặng nhọc này. + +### Step‑by‑step implementation + +1. **Cấu hình một `TextStamp`** với các thuộc tính tự điều chỉnh. +2. **Tải PDF đích** mà bạn muốn dán stamp. +3. **Thêm stamp vào một trang** và lưu kết quả. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// 1️⃣ Create a TextStamp that auto‑fits its rectangle +var autoFitStamp = new TextStamp("Important notice") +{ + // Let Aspose shrink or grow the font until it fits + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, // finer precision for tighter fit + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, // Desired stamp width in points + Height = 150, // Desired stamp height in points + // Optional styling + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } +}; + +// 2️⃣ Load the PDF you want to stamp +using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) +{ + // 3️⃣ Add the stamp to the first page (you can choose any page) + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + + // Save the stamped PDF + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); +} +``` + +**Result:** `stampAutoFit.pdf` chứa văn bản “Important notice” được căn chỉnh kích thước hoàn hảo trong hình chữ nhật 300 × 150 pt, bất kể độ dài chuỗi gốc. + +#### Edge cases to consider + +- **Very long strings:** Nếu văn bản vượt quá hình chữ nhật ngay cả khi giảm đến kích thước phông chữ nhỏ nhất, Aspose sẽ cắt ngắn theo `WordWrapMode`. Bạn có thể kiểm tra độ dài trước hoặc tăng kích thước hình chữ nhật. +- **Multiple stamps:** Việc tái sử dụng cùng một instance `TextStamp` trên các trang khác nhau hoạt động, nhưng nhớ rằng các thuộc tính vị trí (`Left`, `Top`) giữ giá trị cuối cùng—hãy đặt lại chúng khi cần. + +--- + +## ## Saving PDF as HTML Using the Font’s CMap Table + +### Why bother with the CMap table? + +Khi chuyển PDF sang HTML, việc bảo tồn ánh xạ Unicode là rất quan trọng để có thể tìm kiếm được văn bản. Chiến lược dựa trên CMap buộc Aspose ưu tiên bảng ký tự nội bộ của phông, thường cho kết quả trích xuất văn bản chính xác hơn so với mã hoá chung. + +### Step‑by‑step implementation + +1. **Tạo `HtmlSaveOptions`** với quy tắc mã hoá dựa trên CMap. +2. **Tải PDF nguồn**. +3. **Lưu dưới dạng HTML** bằng các tùy chọn đã cấu hình. + +```csharp +using Aspose.Pdf; + +// 1️⃣ Prepare HTML save options that favor CMap‑based Unicode mapping +var htmlOptions = new HtmlSaveOptions +{ + // This tells Aspose to prefer the font's CMap when generating Unicode text + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + // Optional: split each page into a separate HTML file + SplitIntoPages = true, + // Optional: embed CSS for better styling + EmbedCss = true +}; + +// 2️⃣ Load the PDF you wish to convert +using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) +{ + // 3️⃣ Export the PDF as HTML with the CMap‑aware options + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); +} +``` + +**What you’ll get:** Một thư mục (nếu `SplitIntoPages` là true) chứa `cmapHtml.html` và các tài nguyên liên quan. Mở HTML trong trình duyệt và bạn sẽ thấy văn bản có thể chọn, tìm kiếm và gần như khớp hoàn toàn với PDF gốc. + +#### Tips for a clean HTML export + +- **Images vs. vectors:** Đặt `RasterImagesSavingMode` thành `RasterImagesSavingMode.AsEmbeddedPartsOfPng` nếu bạn muốn PNG thay vì JPEG để có đồ họa sắc nét hơn. +- **Large PDFs:** Sử dụng `HtmlSaveOptions.PageSavingMode = HtmlSaveOptions.HtmlPageSavingModes.SplitIntoPages` để mỗi trang HTML nhẹ hơn. + +--- + +## ## Full Working Example – All Three Scenarios in One Project + +Dưới đây là một ứng dụng console tự chứa, minh họa ba kỹ thuật đồng thời. Sao chép‑dán vào một dự án console C# mới, thêm gói NuGet Aspose.PDF, và điều chỉnh các đường dẫn file. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Devices; +using Aspose.Pdf.Text; + +namespace AsposePdfDemo +{ + class Program + { + static void Main() + { + // --------------------------------------------------- + // 1️⃣ Render PDF page to PNG with font analysis + // --------------------------------------------------- + var pngDevice = new PngDevice + { + RenderingOptions = new RenderingOptions { AnalyzeFonts = true } + }; + using (var srcPdf = new Document("YOUR_DIRECTORY/complexFonts.pdf")) + { + pngDevice.Process(srcPdf.Pages[1], "YOUR_DIRECTORY/rendered.png"); + Console.WriteLine("✅ PNG rendered with font analysis."); + } + + // --------------------------------------------------- + // 2️⃣ Add an auto‑fit TextStamp + // --------------------------------------------------- + var autoFitStamp = new TextStamp("Important notice") + { + AutoAdjustFontSizeToFitStampRectangle = true, + AutoAdjustFontSizePrecision = 0.01f, + WordWrapMode = TextFormattingOptions.WordWrapMode.ByWords, + Width = 300, + Height = 150, + Background = new BackgroundInfo(Color.Yellow), + TextState = new TextState { FontSize = 48, Font = FontRepository.FindFont("Arial") } + }; + using (var pdfToStamp = new Document("YOUR_DIRECTORY/input.pdf")) + { + pdfToStamp.Pages[1].AddStamp(autoFitStamp); + pdfToStamp.Save("YOUR_DIRECTORY/stampAutoFit.pdf"); + Console.WriteLine("✅ TextStamp added and PDF saved."); + } + + // --------------------------------------------------- + // 3️⃣ Save PDF as HTML using CMap‑based Unicode mapping + // --------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + FontEncodingStrategy = HtmlSaveOptions.FontEncodingRules.DecreaseToUnicodePriorityLevel, + SplitIntoPages = true, + EmbedCss = true + }; + using (var pdfForHtml = new Document("YOUR_DIRECTORY/sample.pdf")) + { + pdfForHtml.Save("YOUR_DIRECTORY/cmapHtml.html", htmlOptions); + Console.WriteLine("✅ PDF saved as HTML with CMap priority."); + } + + Console.WriteLine("All tasks completed. Check YOUR_DIRECTORY for output files."); + } + } +} +``` + +Chạy chương trình, bạn sẽ thấy: + +- `rendered.png` – hình ảnh hoàn hảo của trang đầu tiên PDF. +- `stampAutoFit.pdf` – PDF gốc với stamp “Important notice” có kích thước tự động điều chỉnh. +- `cmapHtml.html` (cùng các file HTML riêng cho mỗi trang) – phiên bản HTML giữ nguyên mã hoá văn bản gốc. + +--- + +## ## Frequently Asked Questions (FAQ) + +**Q: Does `AnalyzeFonts` increase rendering time?** +A: Hơi tăng một chút, vì Aspose phải quét từng luồng phông chữ. Đổi lại, lợi ích thường đáng giá hơn đối với các PDF phức tạp mà việc thiếu glyph là không thể chấp nhận. + +**Q: Can I render multiple pages in a loop?** +A: Chắc chắn rồi. Chỉ cần lặp qua `sourcePdf.Pages` và gọi `pngDevice.Process(page, $"page{page.Number}.png")`. Đừng quên giải phóng mỗi `Document` nếu bạn mở chúng riêng biệt. + +**Q: What if + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file