From 68d9f69cb75979db49d1a15ffa8967a97bd53475 Mon Sep 17 00:00:00 2001 From: Muhammad Adil Date: Wed, 29 Jul 2026 22:28:09 +0000 Subject: [PATCH] Add 1 pdf net tutorials MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Categories: advanced-features Source: AI Search API Tutorials: - Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide Auto-generated by Professionalize.Tutorials Agent --- pdf/arabic/net/advanced-features/_index.md | 3 + .../_index.md | 270 +++++++++++++++++ pdf/chinese/net/advanced-features/_index.md | 3 + .../_index.md | 269 +++++++++++++++++ pdf/czech/net/advanced-features/_index.md | 3 + .../_index.md | 268 +++++++++++++++++ pdf/dutch/net/advanced-features/_index.md | 3 + .../_index.md | 268 +++++++++++++++++ pdf/english/net/advanced-features/_index.md | 3 + .../_index.md | 272 +++++++++++++++++ .../og-image.png | Bin 0 -> 45815 bytes pdf/french/net/advanced-features/_index.md | 3 + .../_index.md | 271 +++++++++++++++++ pdf/german/net/advanced-features/_index.md | 3 + .../_index.md | 271 +++++++++++++++++ pdf/greek/net/advanced-features/_index.md | 3 + .../_index.md | 254 ++++++++++++++++ pdf/hindi/net/advanced-features/_index.md | 3 +- .../_index.md | 272 +++++++++++++++++ pdf/hongkong/net/advanced-features/_index.md | 3 + .../_index.md | 268 +++++++++++++++++ pdf/hungarian/net/advanced-features/_index.md | 3 + .../_index.md | 252 ++++++++++++++++ .../net/advanced-features/_index.md | 3 + .../_index.md | 272 +++++++++++++++++ pdf/italian/net/advanced-features/_index.md | 3 + .../_index.md | 266 +++++++++++++++++ pdf/japanese/net/advanced-features/_index.md | 3 + .../_index.md | 269 +++++++++++++++++ pdf/korean/net/advanced-features/_index.md | 5 +- .../_index.md | 268 +++++++++++++++++ pdf/polish/net/advanced-features/_index.md | 7 +- .../_index.md | 272 +++++++++++++++++ .../net/advanced-features/_index.md | 3 + .../_index.md | 270 +++++++++++++++++ pdf/russian/net/advanced-features/_index.md | 3 + .../_index.md | 274 ++++++++++++++++++ pdf/spanish/net/advanced-features/_index.md | 3 + .../_index.md | 271 +++++++++++++++++ pdf/swedish/net/advanced-features/_index.md | 3 + .../_index.md | 272 +++++++++++++++++ pdf/thai/net/advanced-features/_index.md | 3 + .../_index.md | 270 +++++++++++++++++ pdf/turkish/net/advanced-features/_index.md | 3 +- .../_index.md | 270 +++++++++++++++++ .../net/advanced-features/_index.md | 3 + .../_index.md | 272 +++++++++++++++++ 47 files changed, 6251 insertions(+), 5 deletions(-) create mode 100644 pdf/arabic/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/chinese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/czech/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/dutch/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/english/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/english/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/og-image.png create mode 100644 pdf/french/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/german/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/greek/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/hindi/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/hongkong/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/hungarian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/indonesian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/italian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/japanese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/korean/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/polish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/portuguese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/russian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/spanish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/swedish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/thai/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/turkish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md create mode 100644 pdf/vietnamese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md diff --git a/pdf/arabic/net/advanced-features/_index.md b/pdf/arabic/net/advanced-features/_index.md index 1f69f14038..2695512540 100644 --- a/pdf/arabic/net/advanced-features/_index.md +++ b/pdf/arabic/net/advanced-features/_index.md @@ -65,6 +65,9 @@ ### [كيفية مقارنة ملفات PDF في C# – دليل كامل لإنشاء فرق PDF](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) تعرف على كيفية مقارنة ملفات PDF في C# وإنشاء فرق PDF باستخدام Aspose.PDF بسهولة ودقة. +### [إضافة الشفافية إلى ملفات PDF باستخدام Aspose.Pdf – دليل كامل .NET](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +تعلم كيفية تطبيق تأثير الشفافية على مستندات PDF باستخدام Aspose.Pdf في بيئة .NET خطوة بخطوة. + ## موارد إضافية - [توثيق Aspose.PDF للشبكة](https://docs.aspose.com/pdf/net/) diff --git a/pdf/arabic/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/arabic/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..da505dbafa --- /dev/null +++ b/pdf/arabic/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-07-29 +description: أضف الشفافية إلى ملف PDF باستخدام Aspose.Pdf لـ .NET. تعلم كيفية ضبط + شفافية PDF، وضع الدمج، وحالة الرسومات في دليل خطوة بخطوة. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: ar +lastmod: 2026-07-29 +og_description: أضف الشفافية إلى PDF بسرعة. يوضح هذا الدليل كيفية ضبط شفافية PDF ووضع + الدمج باستخدام Aspose.Pdf لـ .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: إضافة الشفافية إلى PDF باستخدام Aspose.Pdf – دليل كامل لـ .NET +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: إضافة الشفافية إلى PDF باستخدام Aspose.Pdf – دليل .NET الكامل +url: /ar/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# إضافة الشفافية إلى PDF باستخدام Aspose.Pdf – دليل .NET كامل + +هل احتجت يومًا إلى **إضافة شفافية إلى ملفات PDF** لكنك لم تكن متأكدًا من أي خصائص API يجب تعديلها؟ لست وحدك. في هذا الدرس سنستعرض مثالًا عمليًا من البداية إلى النهاية يوضح بالضبط كيفية ضبط شفافية PDF، وتحديد وضع المزج، وإدخال حالة رسومية جديدة باستخدام **Aspose.Pdf for .NET**. + +سنبدأ بملف PDF فارغ، نضيف مستطيلًا شبه شفاف، ثم نحفظ النتيجة—كل ذلك في بضع أسطر فقط. في النهاية ستفهم لماذا يعتبر **قاموس ExtGState** مهمًا، وكيف تتحكم **الحالة الرسومية** في شفافية الخط والملء، وما يفعله **وضع المزج** خلف الكواليس. + +## ما ستتعلمه + +- كيفية تحميل ملف PDF موجود باستخدام Aspose.Pdf. +- كيفية الوصول إلى **قاموس ExtGState** وتعديله في صفحة. +- كيفية إنشاء **حالة رسومية** جديدة تحدد الإدخالات `CA` و `ca` و `BM`. +- كيفية حفظ المستند المعدل بحيث يكون تأثير الشفافية مرئيًا في أي عارض PDF. +- الأخطاء الشائعة (مثل نسيان إضافة الحالة الجديدة إلى قاموس الموارد) والحلول السريعة. + +> **المتطلبات المسبقة:** Visual Studio 2022 (أو أي بيئة تطوير تفضلها)، .NET 6 أو أحدث، ورخصة Aspose.Pdf for .NET (التجربة المجانية تكفي لهذا العرض). + +--- + +## الخطوة 1: تحميل مستند PDF + +أولًا—افتح الملف الذي تريد تعديله. تتولى فئة `Aspose.Pdf.Document` كل شيء من التحليل إلى الكتابة. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*لماذا هذا مهم:* تحميل المستند يمنحك الوصول إلى كائنات COS (Concrete Object Structure) الداخلية، حيث تكمن **الحالة الرسومية**. بدون كائن `Document` صالح لا يمكنك الوصول إلى **قاموس ExtGState**. + +--- + +## الخطوة 2: الحصول على الصفحة الأولى وقاموس مواردها + +يتم تطبيق الشفافية على مستوى موارد الصفحة، لذا نحتاج إلى مجموعة موارد الصفحة. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **نصيحة:** إذا كنت تعمل مع ملفات PDF متعددة الصفحات، ما عليك سوى التكرار عبر `document.Pages` وتكرار الخطوات لكل صفحة تريد تعديلها. + +--- + +## الخطوة 3: تحديد (أو إنشاء) قاموس ExtGState + +تخزن إدخالة **ExtGState** جميع الحالات الرسومية الموسعة للصفحة. إذا لم يكن موجودًا بعد، سيقوم Aspose بإنشاء واحد فارغ لنا. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*شرح:* +- `resourcesEditor["ExtGState"]` يجلب القاموس الموجود. +- عامل الـ null‑coalescing (`??`) يضمن أن لدينا دائمًا قاموسًا للعمل معه، مما يمنع حدوث `NullReferenceException`. + +--- + +## الخطوة 4: بناء حالة رسومية جديدة مع شفافية PDF + +الآن نحدد معلمات الشفافية الفعلية. `CA` يتحكم في شفافية الخط، `ca` يتحكم في شفافية الملء، و `BM` يحدد وضع المزج (مثل “Normal”، “Multiply”، إلخ). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*لماذا هذه المفاتيح؟* +- `CA` (`Stroke opacity`) و `ca` (`Fill opacity`) هما الإدخالان الرقميان الذين يستخدمهما معيار PDF للتعبير عن الشفافية. +- `BM` (`Blend mode`) يخبر المُعالج كيف يجمع الكائن الشفاف مع الخلفية؛ “Normal” هو الخيار الأكثر شيوعًا. + +--- + +## الخطوة 5: تسجيل الحالة الجديدة في قاموس ExtGState + +نُعطي حالتنا الرسومية اسمًا (`GS0` في هذا المثال) ونضعه في مجموعة **ExtGState** الخاصة بالصفحة. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **نصيحة احترافية:** اختر اسمًا فريدًا (`GS1`، `GS2`، …) إذا كنت تخطط لإضافة حالات متعددة. إعادة استخدام اسم سيؤدي إلى استبدال الإدخال السابق. + +--- + +## الخطوة 6: تطبيق الحالة الرسومية على المحتوى (اختياري لكن مُستحسن) + +إذا أردت رؤية تأثير الشفافية فورًا، يمكنك رسم مستطيل باستخدام الحالة التي أنشأتها للتو. هذه الخطوة ليست ضرورية تمامًا لـ *إضافة شفافية إلى PDF*—الحالة الآن متاحة لأي تدفقات محتوى مستقبلية—لكنها تساعدك على التحقق من أن كل شيء يعمل. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*شرح:* +- `SetExtGState("GS0")` يخبر تدفق المحتوى باستخدام الحالة الرسومية التي عرّفناها. +- سيظهر المستطيل بشفافية ملء 50 %، مؤكدًا أن إعدادات **شفافية PDF** فعّالة. + +--- + +## الخطوة 7: حفظ ملف PDF المعدل + +أخيرًا، اكتب التغييرات إلى القرص. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +افتح `output.pdf` في Adobe Acrobat أو Foxit أو حتى المتصفح—يجب أن ترى المستطيل شبه الشفاف يغطي محتوى الصفحة. + +--- + +## مثال عملي كامل + +لنجمع كل شيء معًا، إليك البرنامج الكامل جاهزًا للنسخ واللصق: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### النتيجة المتوقعة + +- يحتوي `output.pdf` على الصفحات الأصلية **بالإضافة إلى** مستطيل أحمر شفاف بنسبة 50 %. +- إدخال **ExtGState** `GS0` أصبح الآن جزءًا من قاموس موارد الصفحة، جاهزًا لإعادة الاستخدام. + +--- + +## أسئلة شائعة وحالات خاصة + +| السؤال | الجواب | +|----------|--------| +| **هل أحتاج إلى رخصة لتشغيل هذا؟** | رخصة تجريبية تعمل للتطوير والاختبار. للإنتاج ستحتاج إلى رخصة مدفوعة، وإلا سيظهر علامة مائية في الناتج. | +| **ماذا لو كان ملف PDF يحتوي بالفعل على إدخال ExtGState؟** | يتحقق الكود من وجود القاموس ويعيد استخدامه، لذا لن تفقد أي حالات معرفة مسبقًا. | +| **هل يمكنني تعيين وضع مزج مختلف؟** | بالتأكيد. استبدل `"Normal"` بـ `"Multiply"` أو `"Screen"` أو أي وضع مزج معرف في PDF. | +| **هل `CA` إلزامي؟** | لا. إذا حذفت `CA`، فإن شفافية الخط تُفترض 1 (معتمة بالكامل). يمكنك أيضًا تعيين `ca` فقط لشفافية الملء. | +| **كيف أطبق الحالة على النص؟** | استخدم `canvas.SetExtGState("GS0")` قبل استدعاء `canvas.ShowText(...)`. نفس الحالة الرسومية تعمل مع النص والمسارات والصور. | + +--- + +## الخطوات التالية + +الآن + +## ماذا يجب أن تتعلم بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات التي تم توضيحها في هذا الدليل. كل مصدر يتضمن أمثلة شفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف نهج تنفيذ بديلة في مشاريعك الخاصة. + +- [إضافة طوابع الصور إلى ملفات PDF باستخدام Aspose.PDF for .NET: دليل خطوة بخطوة](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [كيفية إضافة طابع نصي إلى PDF باستخدام Aspose.PDF .NET: دليل شامل](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [كيفية إضافة طوابع الصفحات في ملفات PDF باستخدام Aspose.PDF for .NET: دليل كامل](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/chinese/net/advanced-features/_index.md b/pdf/chinese/net/advanced-features/_index.md index 52966270c7..50fc7a2165 100644 --- a/pdf/chinese/net/advanced-features/_index.md +++ b/pdf/chinese/net/advanced-features/_index.md @@ -65,6 +65,9 @@ ### [如何在 C# 中比较 PDF – 生成 PDF 差异的完整指南](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) 了解如何使用 Aspose.PDF for .NET 在 C# 中比较 PDF 文件并生成差异报告,帮助快速定位文档变化。 +### [使用 Aspose.PDF for .NET 为 PDF 添加透明度 – 完整指南](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +了解如何使用 Aspose.PDF for .NET 在 PDF 中添加透明效果,包括设置透明度、图形和文本的示例代码。 + ## 其他资源 - [Aspose.PDF 用于网络文档](https://docs.aspose.com/pdf/net/) diff --git a/pdf/chinese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/chinese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..c5b26aac98 --- /dev/null +++ b/pdf/chinese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,269 @@ +--- +category: general +date: 2026-07-29 +description: 使用 Aspose.Pdf for .NET 为 PDF 添加透明度。通过一步步教程学习设置 PDF 的不透明度、混合模式和图形状态。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: zh +lastmod: 2026-07-29 +og_description: 快速为 PDF 添加透明度。本指南展示如何使用 Aspose.Pdf for .NET 设置 PDF 的不透明度和混合模式。 +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: 使用 Aspose.Pdf 为 PDF 添加透明度 – 完整 .NET 教程 +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: 使用 Aspose.Pdf 为 PDF 添加透明度 – 完整 .NET 指南 +url: /zh/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 为 PDF 添加透明度 – Aspose.Pdf 完整 .NET 指南 + +是否曾需要 **为 PDF 添加透明度** 却不确定该修改哪些 API 属性?你并不孤单。在本教程中,我们将通过一个实用的端到端示例,完整演示如何设置 PDF 不透明度、定义混合模式,并使用 **Aspose.Pdf for .NET** 注入新的图形状态。 + +我们将从一个空白 PDF 开始,添加一个半透明矩形,并保存结果——只需几行代码。完成后,你将了解 **ExtGState 字典** 的重要性、**图形状态** 如何同时控制描边和填充不透明度,以及 **Blend mode** 在底层的作用。 + +## 你将学到 + +- 如何使用 Aspose.Pdf 加载已有的 PDF。 +- 如何访问并修改页面上的 **ExtGState** 字典。 +- 如何创建一个新的 **graphics state**,并定义 `CA`、`ca` 和 `BM` 条目。 +- 如何保存修改后的文档,使透明效果在任何 PDF 查看器中可见。 +- 常见陷阱(例如忘记将新状态添加到资源字典)以及快速解决方案。 + +> **先决条件:** Visual Studio 2022(或任意你喜欢的 IDE)、.NET 6 或更高版本,以及 Aspose.Pdf for .NET 许可证(免费试用版可用于本演示)。 + +--- + +## 第一步:加载 PDF 文档 + +首先——打开你想编辑的文件。`Aspose.Pdf.Document` 类负责从解析到写入的全部工作。 + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*为什么这很重要:* 加载文档后,你才能访问内部的 COS(Concrete Object Structure)对象,而 **graphics state** 就存放在那里。没有有效的 `Document` 实例,就无法获取 **ExtGState 字典**。 + +--- + +## 第二步:获取第一页及其资源字典 + +透明度是在页面级资源范围内应用的,所以我们需要页面的资源集合。 + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **提示:** 如果处理多页 PDF,只需遍历 `document.Pages`,对每个需要修改的页面重复上述步骤。 + +--- + +## 第三步:定位(或创建)ExtGState 字典 + +**ExtGState** 条目存储页面的所有扩展图形状态。如果尚不存在,Aspose 会为我们创建一个空字典。 + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*解释:* +- `resourcesEditor["ExtGState"]` 获取已有的字典。 +- 空合并运算符 (`??`) 确保我们始终拥有一个字典,防止出现 `NullReferenceException`。 + +--- + +## 第四步:构建带有 PDF 不透明度的新图形状态 + +现在我们定义实际的透明度参数。`CA` 控制描边不透明度,`ca` 控制填充不透明度,`BM` 设置混合模式(例如 “Normal”、 “Multiply”等)。 + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*为什么使用这些键?* +- `CA`(**Stroke opacity**)和 `ca`(**Fill opacity**)是 PDF 规范中用于表达透明度的两个数值条目。 +- `BM`(**Blend mode**)告诉渲染器如何将透明对象与背景合并;“Normal” 是最常用的选择。 + +--- + +## 第五步:在 ExtGState 字典中注册新状态 + +我们为图形状态指定一个名称(本例中为 `GS0`),并将其放入页面的 **ExtGState** 集合。 + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **专业技巧:** 如果计划添加多个状态,请使用唯一名称(`GS1`、`GS2` …)。重复使用同一名称会覆盖之前的条目。 + +--- + +## 第六步:将图形状态应用到内容(可选但推荐) + +如果想立刻看到透明效果,可以使用新建的状态绘制一个矩形。此步骤并非 *为 PDF 添加透明度* 的必需操作——状态已经可供后续内容流使用——但它有助于验证一切正常。 + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*解释:* +- `SetExtGState("GS0")` 告诉内容流使用我们定义的图形状态。 +- 矩形将以 50 % 填充不透明度显示,确认 **PDF 不透明度** 设置已生效。 + +--- + +## 第七步:保存修改后的 PDF + +最后,将更改写回磁盘。 + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +在 Adobe Acrobat、Foxit 或浏览器中打开 `output.pdf`——你应该能看到半透明矩形覆盖在页面内容上。 + +--- + +## 完整工作示例 + +将所有代码组合在一起,下面是可直接复制粘贴的完整程序: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### 预期输出 + +- `output.pdf` 包含原始页面 **以及** 一个 50 % 透明的红色矩形。 +- **ExtGState** 条目 `GS0` 已成为页面资源字典的一部分,可供后续复用。 + +--- + +## 常见问题与边缘情况 + +| 问题 | 回答 | +|----------|--------| +| **运行此示例是否需要许可证?** | 试用许可证可用于开发和测试。生产环境需要付费许可证,否则输出会带有水印。 | +| **如果 PDF 已经有 ExtGState 条目怎么办?** | 代码会检查是否已有字典并复用它,因此不会丢失之前定义的状态。 | +| **我可以设置其他混合模式吗?** | 完全可以。将 `"Normal"` 替换为 `"Multiply"`、`"Screen"` 或任何 PDF 定义的混合模式。 | +| **`CA` 是必须的吗?** | 不是。如果省略 `CA`,描边不透明度默认是 1(完全不透明)。你也可以仅设置 `ca` 来实现填充透明。 | +| **如何将状态应用到文本?** | 在调用 `canvas.ShowText(...)` 之前使用 `canvas.SetExtGState("GS0")`。同一图形状态可用于文本、路径和图像。 | + +--- + +## 后续步骤 + +现在 + + +## 接下来该学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助你在项目中进一步掌握 API 功能并探索替代实现方式。每篇资源均提供完整可运行的代码示例和逐步说明。 + +- [Add Image Stamps to PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [How to Add Page Stamps in PDFs Using Aspose.PDF for .NET: A Complete Guide](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/advanced-features/_index.md b/pdf/czech/net/advanced-features/_index.md index 3fad285131..3302c00064 100644 --- a/pdf/czech/net/advanced-features/_index.md +++ b/pdf/czech/net/advanced-features/_index.md @@ -65,6 +65,9 @@ Naučte se vytvářet přístupné, stylizované a tagované PDF dokumenty pomoc ### [Jak porovnat PDF v C# – Kompletní průvodce generováním PDF rozdílů](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Naučte se, jak porovnat PDF soubory v C# a generovat rozdíly PDF pomocí Aspose.PDF. +### [Přidání průhlednosti do PDF pomocí Aspose.Pdf – Kompletní průvodce .NET](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Naučte se, jak přidat průhlednost do PDF dokumentů 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/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/czech/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..92da1cb2c8 --- /dev/null +++ b/pdf/czech/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-07-29 +description: Přidejte průhlednost do PDF pomocí Aspose.Pdf pro .NET. Naučte se nastavit + průhlednost PDF, režim prolnutí a grafický stav v návodu krok za krokem. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: cs +lastmod: 2026-07-29 +og_description: Rychle přidejte průhlednost do PDF. Tento průvodce ukazuje, jak nastavit + průhlednost a režim prolnutí PDF pomocí Aspose.Pdf pro .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Přidejte průhlednost do PDF pomocí Aspose.Pdf – Kompletní průvodce .NET +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Přidejte průhlednost do PDF pomocí Aspose.Pdf – Kompletní průvodce .NET +url: /cs/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Přidání průhlednosti do PDF pomocí Aspose.Pdf – Kompletní .NET průvodce + +Už jste někdy potřebovali **přidat průhlednost do PDF** souborů, ale nebyli jste si jisti, které vlastnosti API upravit? Nejste v tom sami. V tomto tutoriálu projdeme praktickým, kompletním příkladem, který přesně ukazuje, jak nastavit neprůhlednost PDF, definovat režim prolnutí a vložit nový grafický stav pomocí **Aspose.Pdf for .NET**. + +Začneme prázdným PDF, přidáme poloprůhledný obdélník a výsledek uložíme – vše během několika řádků. Na konci pochopíte, proč je důležitý **ExtGState dictionary**, jak **grafický stav** řídí neprůhlednost tahů i výplně a co **Blend mode** dělá pod kapotou. + +## Co se naučíte + +- Jak načíst existující PDF pomocí Aspose.Pdf. +- Jak získat přístup a upravit **ExtGState** dictionary na stránce. +- Jak vytvořit nový **graphics state**, který definuje položky `CA`, `ca` a `BM`. +- Jak uložit upravený dokument, aby byl efekt průhlednosti viditelný v libovolném prohlížeči PDF. +- Běžné úskalí (např. zapomenutí přidat nový stav do slovníku zdrojů) a rychlé opravy. + +> **Požadavky:** Visual Studio 2022 (nebo jakékoli IDE dle vašeho výběru), .NET 6 nebo novější a licence Aspose.Pdf pro .NET (bezplatná zkušební verze stačí pro tento ukázkový projekt). + +--- + +## Krok 1: Načtení PDF dokumentu + +Nejprve otevřete soubor, který chcete upravit. Třída `Aspose.Pdf.Document` se stará o vše od parsování po zápis. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Proč je to důležité:* Načtení dokumentu vám poskytuje přístup k interním objektům COS (Concrete Object Structure), kde se nachází **graphics state**. Bez platné instance `Document` se k **ExtGState dictionary** nedostanete. + +--- + +## Krok 2: Získání první stránky a jejího slovníku zdrojů + +Průhlednost se aplikuje na úrovni zdrojů stránky, takže potřebujeme kolekci zdrojů stránky. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Tip:** Pokud pracujete s PDF s více stránkami, stačí projít `document.Pages` a opakovat kroky pro každou stránku, kterou chcete upravit. + +--- + +## Krok 3: Vyhledání (nebo vytvoření) ExtGState dictionary + +**ExtGState** položka ukládá všechny rozšířené grafické stavy pro stránku. Pokud ještě neexistuje, Aspose pro nás vytvoří prázdnou. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Vysvětlení:* +- `resourcesEditor["ExtGState"]` získá existující slovník. +- Operátor null‑coalescing (`??`) zajišťuje, že vždy máme slovník, se kterým můžeme pracovat, čímž se předejde `NullReferenceException`. + +--- + +## Krok 4: Vytvoření nového grafického stavu s neprůhledností PDF + +Nyní definujeme skutečné parametry průhlednosti. `CA` řídí neprůhlednost tahu, `ca` řídí neprůhlednost výplně a `BM` nastavuje režim prolnutí (např. „Normal“, „Multiply“ atd.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Proč tyto klíče?* +- `CA` (`Stroke opacity`) a `ca` (`Fill opacity`) jsou dva číselné záznamy, které specifikace PDF používá k vyjádření průhlednosti. +- `BM` (`Blend mode`) říká rendereru, jak kombinovat průhledný objekt s pozadím; „Normal“ je nejčastější volba. + +--- + +## Krok 5: Registrace nového stavu v ExtGState dictionary + +Pojmenujeme náš grafický stav (`GS0` v tomto příkladu) a vložíme jej do **ExtGState** kolekce stránky. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Pro tip:** Zvolte jedinečný název (`GS1`, `GS2`, …), pokud plánujete přidat více stavů. Opětovné použití názvu přepíše předchozí položku. + +--- + +## Krok 6: Použití grafického stavu na obsah (volitelné, ale doporučené) + +Pokud chcete okamžitě vidět efekt průhlednosti, můžete pomocí nově vytvořeného stavu nakreslit obdélník. Tento krok není striktně nutný pro *přidání průhlednosti do PDF* – stav je nyní k dispozici pro jakékoli budoucí obsahové proudy – ale pomůže vám ověřit, že vše funguje. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Vysvětlení:* +- `SetExtGState("GS0")` říká obsahovému proudu, aby použil grafický stav, který jsme definovali. +- Obdélník se zobrazí s 50 % neprůhledností výplně, což potvrzuje, že nastavení **PDF opacity** jsou aktivní. + +--- + +## Krok 7: Uložení upraveného PDF + +Nakonec zapíšeme změny zpět na disk. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Otevřete `output.pdf` v Adobe Acrobat, Foxit nebo dokonce ve vašem prohlížeči – měli byste vidět poloprůhledný obdélník překrývající obsah stránky. + +--- + +## Kompletní funkční příklad + +Spojením všech částí získáte kompletní, připravený program ke zkopírování: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Očekávaný výstup + +- `output.pdf` obsahuje původní stránky **plus** červený obdélník, který je 50 % průhledný. +- **ExtGState** položka `GS0` je nyní součástí slovníku zdrojů stránky, připravena k opětovnému použití. + +--- + +## Časté otázky a okrajové případy + +| Otázka | Odpověď | +|----------|--------| +| **Potřebuji licenci pro spuštění?** | Zkušební licence stačí pro vývoj a testování. Pro produkci budete potřebovat placenou licenci, jinak výstup bude obsahovat vodoznak. | +| **Co když PDF již má položku ExtGState?** | Kód kontroluje existující slovník a znovu jej používá, takže nepřijdete o žádné dříve definované stavy. | +| **Mohu nastavit jiný blend mode?** | Určitě. Nahraďte `"Normal"` za `"Multiply"`, `"Screen"` nebo jakýkoli blend mode definovaný v PDF. | +| **Je `CA` povinné?** | Ne. Pokud `CA` vynecháte, neprůhlednost tahu se nastaví na 1 (plně neprůhledná). Můžete také nastavit jen `ca` pro průhlednost výplně. | +| **Jak použiji stav na text?** | Použijte `canvas.SetExtGState("GS0")` před voláním `canvas.ShowText(...)`. Stejný grafický stav funguje pro text, cesty i obrázky. | + +## Další kroky + +Nyní + +## Co byste se měli naučit dál? + +Následující tutoriály pokrývají úzce související témata, která staví na technikách předvedených v tomto průvodci. Každý zdroj obsahuje kompletní funkční ukázky kódu s podrobnými vysvětleními, které vám pomohou zvládnout další funkce API a prozkoumat alternativní přístupy k implementaci ve vašich projektech. + +- [Přidání obrázkových razítek do PDF pomocí Aspose.PDF pro .NET: krok za krokem](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Jak přidat textové razítko do PDF pomocí Aspose.PDF .NET: komplexní průvodce](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [Jak přidat razítka stránek do PDF pomocí Aspose.PDF pro .NET: kompletní průvodce](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/advanced-features/_index.md b/pdf/dutch/net/advanced-features/_index.md index 0186fffe5b..7687c0de76 100644 --- a/pdf/dutch/net/advanced-features/_index.md +++ b/pdf/dutch/net/advanced-features/_index.md @@ -65,6 +65,9 @@ Leer hoe u toegankelijke, gestileerde, getagde PDF-documenten maakt met Aspose.P ### [Hoe PDF's te vergelijken in C# – Complete gids voor het genereren van PDF-diff](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Leer hoe u PDF-bestanden met C# kunt vergelijken en verschillen (diff) genereert met Aspose.PDF. +### [Transparantie toevoegen aan PDF met Aspose.Pdf – Complete .NET-gids](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Leer hoe u transparantie toepast op PDF‑elementen met Aspose.PDF voor .NET, inclusief codevoorbeelden en stapsgewijze instructies. + ## Aanvullende bronnen - [Aspose.PDF voor Netdocumentatie](https://docs.aspose.com/pdf/net/) diff --git a/pdf/dutch/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/dutch/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..3f1bde7e16 --- /dev/null +++ b/pdf/dutch/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-07-29 +description: Voeg transparantie toe aan PDF met Aspose.Pdf voor .NET. Leer hoe je + PDF‑opaciteit, mengmodus en grafische toestand instelt in een stapsgewijze tutorial. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: nl +lastmod: 2026-07-29 +og_description: Voeg snel transparantie toe aan PDF. Deze gids laat zien hoe je de + PDF‑opaciteit en mengmodus instelt met Aspose.Pdf voor .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Transparantie toevoegen aan PDF met Aspose.Pdf – Volledige .NET-walkthrough +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Transparantie toevoegen aan PDF met Aspose.Pdf – Complete .NET‑gids +url: /nl/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Transparantie toevoegen aan PDF met Aspose.Pdf – Complete .NET-gids + +Heb je ooit **transparantie aan PDF**-bestanden moeten toevoegen maar wist je niet welke API‑eigenschappen je moest aanpassen? Je bent niet de enige. In deze tutorial lopen we een praktisch, end‑to‑end voorbeeld door dat precies laat zien hoe je PDF‑opaciteit instelt, een blend‑mode definieert en een nieuwe graphics state injecteert met **Aspose.Pdf for .NET**. + +We beginnen met een lege PDF, strooien een half‑transparante rechthoek erin, en slaan het resultaat op — allemaal in slechts een handvol regels. Aan het einde begrijp je waarom het **ExtGState‑woordenboek** belangrijk is, hoe de **graphics state** zowel de lijn‑ als vul‑opaciteit regelt, en wat de **Blend‑mode** onder de motorkap doet. + +## Wat je zult leren + +- Hoe je een bestaande PDF laadt met Aspose.Pdf. +- Hoe je toegang krijgt tot en de **ExtGState**‑dictionary op een pagina wijzigt. +- Hoe je een nieuwe **graphics state** maakt die `CA`, `ca` en `BM`‑items definieert. +- Hoe je het gewijzigde document opslaat zodat het transparantie‑effect zichtbaar is in elke PDF‑viewer. +- Veelvoorkomende valkuilen (bijv. vergeten om de nieuwe state toe te voegen aan het resource‑dictionary) en snelle oplossingen. + +> **Voorvereisten:** Visual Studio 2022 (of een IDE naar keuze), .NET 6 of hoger, en een Aspose.Pdf for .NET‑licentie (de gratis proefversie werkt voor deze demo). + +--- + +## Stap 1: Laad het PDF‑document + +Allereerst—open het bestand dat je wilt bewerken. De `Aspose.Pdf.Document`‑klasse behandelt alles van het parseren tot het schrijven. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Waarom dit belangrijk is:* Het laden van het document geeft je toegang tot de interne COS (Concrete Object Structure)-objecten, waar de **graphics state** zich bevindt. Zonder een geldige `Document`‑instantie kun je het **ExtGState‑dictionary** niet bereiken. + +--- + +## Stap 2: Haal de eerste pagina en het resource‑dictionary op + +Transparantie wordt toegepast op het resource‑niveau van de pagina, dus we hebben de resource‑collectie van de pagina nodig. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Tip:** Als je met multi‑page PDF’s werkt, loop dan gewoon over `document.Pages` en herhaal de stappen voor elke pagina die je wilt beïnvloeden. + +--- + +## Stap 3: Zoek (of maak) het ExtGState‑dictionary + +De **ExtGState**‑entry slaat alle uitgebreide graphics states voor de pagina op. Als deze nog niet bestaat, maakt Aspose er automatisch een lege voor ons aan. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Uitleg:* +- `resourcesEditor["ExtGState"]` haalt het bestaande dictionary op. +- De null‑coalescing‑operator (`??`) zorgt ervoor dat we altijd een dictionary hebben om mee te werken, waardoor een `NullReferenceException` wordt voorkomen. + +--- + +## Stap 4: Bouw een nieuwe graphics state met PDF‑opaciteit + +Nu definiëren we de daadwerkelijke transparantie‑parameters. `CA` regelt de lijn‑opaciteit, `ca` regelt de vul‑opaciteit, en `BM` stelt de blend‑mode in (bijv. “Normal”, “Multiply”, enz.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Waarom deze sleutels?* +- `CA` (`Stroke opacity`) en `ca` (`Fill opacity`) zijn de twee numerieke items die de PDF‑specificatie gebruikt om transparantie uit te drukken. +- `BM` (`Blend mode`) vertelt de renderer hoe het transparante object met de achtergrond moet worden gecombineerd; “Normal” is de meest voorkomende keuze. + +--- + +## Stap 5: Registreer de nieuwe state in het ExtGState‑dictionary + +We geven onze graphics state een naam (`GS0` in dit voorbeeld) en plaatsen deze in de **ExtGState**‑collectie van de pagina. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Pro tip:** Kies een unieke naam (`GS1`, `GS2`, …) als je van plan bent meerdere states toe te voegen. Het hergebruiken van een naam zal de vorige entry overschrijven. + +--- + +## Stap 6: Pas de graphics state toe op de content (optioneel maar aanbevolen) + +Als je het transparantie‑effect meteen wilt zien, kun je een rechthoek tekenen met de nieuw aangemaakte state. Deze stap is niet strikt noodzakelijk voor *transparantie toevoegen aan PDF* — de state is nu beschikbaar voor toekomstige content‑streams, maar het helpt je te verifiëren dat alles werkt. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Uitleg:* +- `SetExtGState("GS0")` vertelt de content‑stream om de graphics state die we hebben gedefinieerd te gebruiken. +- De rechthoek zal verschijnen met 50 % vul‑opaciteit, wat bevestigt dat de **PDF‑opaciteit**‑instellingen actief zijn. + +--- + +## Stap 7: Sla de gewijzigde PDF op + +Tot slot schrijf je de wijzigingen terug naar de schijf. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Open `output.pdf` in Adobe Acrobat, Foxit, of zelfs je browser — je zou de half‑transparante rechthoek over de paginainhoud moeten zien. + +--- + +## Volledig werkend voorbeeld + +Alles bij elkaar genomen, hier is het volledige, kant‑klaar programma: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Verwachte output + +- `output.pdf` bevat de originele pagina’s **plus** een rode rechthoek die 50 % transparant is. +- De **ExtGState**‑entry `GS0` maakt nu deel uit van het resource‑dictionary van de pagina, klaar voor hergebruik. + +--- + +## Veelgestelde vragen & randgevallen + +| Vraag | Antwoord | +|----------|--------| +| **Heb ik een licentie nodig om dit uit te voeren?** | Een proeflicentie werkt voor ontwikkeling en testen. Voor productie heb je een betaalde licentie nodig, anders bevat de output een watermerk. | +| **Wat als de PDF al een ExtGState‑entry heeft?** | De code controleert op een bestaand dictionary en hergebruikt het, zodat je geen eerder gedefinieerde states verliest. | +| **Kan ik een andere blend‑mode instellen?** | Absoluut. Vervang `"Normal"` door `"Multiply"`, `"Screen"` of een andere PDF‑gedefinieerde blend‑mode. | +| **Is `CA` verplicht?** | Nee. Als je `CA` weglaten, is de lijn‑opaciteit standaard 1 (volledig ondoorzichtig). Je kunt ook alleen `ca` instellen voor vul‑transparantie. | +| **Hoe pas ik de state toe op tekst?** | Gebruik `canvas.SetExtGState("GS0")` vóór het aanroepen van `canvas.ShowText(...)`. Dezelfde graphics state werkt voor tekst, paden en afbeeldingen. | + +## Volgende stappen + +Nu + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden gedemonstreerd. Elke bron bevat volledige werkende code‑voorbeelden met stap‑voor‑stap uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [Afbeeldingsstempels toevoegen aan PDF’s met Aspose.PDF voor .NET: Een stapsgewijze gids](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Hoe een tekststempel toevoegen aan PDF met Aspose.PDF .NET: Uitgebreide gids](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [Hoe paginastempels toevoegen in PDF’s met Aspose.PDF voor .NET: Een complete gids](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/advanced-features/_index.md b/pdf/english/net/advanced-features/_index.md index c5f381e41b..7a667ed715 100644 --- a/pdf/english/net/advanced-features/_index.md +++ b/pdf/english/net/advanced-features/_index.md @@ -23,6 +23,9 @@ Learn how to access and modify child elements in tagged PDFs with Aspose.PDF for ### [Add Colored Line Layers to PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](./add-colored-lines-pdfs-using-aspose-pdf-net/) Learn how to enhance your PDF documents by adding colored line layers using Aspose.PDF for .NET. This guide provides step-by-step instructions and practical applications. +### [Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Learn how to apply transparency effects to PDF elements using Aspose.PDF for .NET with step-by-step code examples. + ### [Aspose.PDF .NET: Enhancing PDF Accessibility through Tagging](./aspose-pdf-net-accessible-tagging-guide/) Learn how to use Aspose.PDF .NET for accessible tagging in PDFs. Set titles, languages, and logical structures easily. diff --git a/pdf/english/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/english/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..29f4eb3d90 --- /dev/null +++ b/pdf/english/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-07-29 +description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF opacity, + blend mode, and graphics state in a step‑by‑step tutorial. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: en +lastmod: 2026-07-29 +og_description: Add transparency to PDF quickly. This guide shows how to set PDF opacity + and blend mode using Aspose.Pdf for .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Add Transparency to PDF with Aspose.Pdf – Full .NET Walkthrough +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide +url: /net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + +Ever needed to **add transparency to PDF** files but weren’t sure which API properties to tweak? You’re not alone. In this tutorial we’ll walk through a practical, end‑to‑end example that shows exactly how to set PDF opacity, define a blend mode, and inject a new graphics state using **Aspose.Pdf for .NET**. + +We’ll start with a blank PDF, sprinkle in a semi‑transparent rectangle, and save the result—all in just a handful of lines. By the end you’ll understand why the **ExtGState dictionary** matters, how the **graphics state** controls both stroke and fill opacity, and what the **Blend mode** does under the hood. + +## What You’ll Learn + +- How to load an existing PDF with Aspose.Pdf. +- How to access and modify the **ExtGState** dictionary on a page. +- How to create a new **graphics state** that defines `CA`, `ca`, and `BM` entries. +- How to save the altered document so the transparency effect is visible in any PDF viewer. +- Common pitfalls (e.g., forgetting to add the new state to the resource dictionary) and quick fixes. + +> **Prerequisites:** Visual Studio 2022 (or any IDE you like), .NET 6 or later, and an Aspose.Pdf for .NET license (the free trial works for this demo). + +--- + +## Step 1: Load the PDF Document + +First things first—open the file you want to edit. The `Aspose.Pdf.Document` class handles everything from parsing to writing. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Why this matters:* Loading the document gives you access to the internal COS (Concrete Object Structure) objects, which is where the **graphics state** lives. Without a valid `Document` instance you can’t reach the **ExtGState dictionary**. + +--- + +## Step 2: Grab the First Page and Its Resource Dictionary + +Transparency is applied at the page‑level resource scope, so we need the page’s resource collection. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Tip:** If you’re working with multi‑page PDFs, just loop over `document.Pages` and repeat the steps for each page you want to affect. + +--- + +## Step 3: Locate (or Create) the ExtGState Dictionary + +The **ExtGState** entry stores all extended graphics states for the page. If it doesn’t exist yet, Aspose will create an empty one for us. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Explanation:* +- `resourcesEditor["ExtGState"]` fetches the existing dictionary. +- The null‑coalescing operator (`??`) ensures we always have a dictionary to work with, preventing a `NullReferenceException`. + +--- + +## Step 4: Build a New Graphics State with PDF Opacity + +Now we define the actual transparency parameters. `CA` controls stroke opacity, `ca` controls fill opacity, and `BM` sets the blend mode (e.g., “Normal”, “Multiply”, etc.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Why these keys?* +- `CA` (`Stroke opacity`) and `ca` (`Fill opacity`) are the two numeric entries the PDF spec uses to express transparency. +- `BM` (`Blend mode`) tells the renderer how to combine the transparent object with the background; “Normal” is the most common choice. + +--- + +## Step 5: Register the New State in the ExtGState Dictionary + +We give our graphics state a name (`GS0` in this example) and stick it into the page’s **ExtGState** collection. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Pro tip:** Pick a unique name (`GS1`, `GS2`, …) if you plan to add multiple states. Reusing a name will overwrite the previous entry. + +--- + +## Step 6: Apply the Graphics State to Content (Optional but Recommended) + +If you want to see the transparency effect immediately, you can draw a rectangle using the newly created state. This step isn’t strictly required for *adding transparency to PDF*—the state is now available for any future content streams—but it helps you verify everything works. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Explanation:* +- `SetExtGState("GS0")` tells the content stream to use the graphics state we defined. +- The rectangle will appear with 50 % fill opacity, confirming that the **PDF opacity** settings are active. + +--- + +## Step 7: Save the Modified PDF + +Finally, write the changes back to disk. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Open `output.pdf` in Adobe Acrobat, Foxit, or even your browser— you should see the semi‑transparent rectangle overlaying the page content. + +--- + +## Full Working Example + +Putting it all together, here’s the complete, copy‑paste‑ready program: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Expected Output + +- `output.pdf` contains the original pages **plus** a red rectangle that is 50 % transparent. +- The **ExtGState** entry `GS0` is now part of the page’s resource dictionary, ready for reuse. + +--- + +## Common Questions & Edge Cases + +| Question | Answer | +|----------|--------| +| **Do I need a license to run this?** | A trial license works for development and testing. For production you’ll need a paid license, otherwise the output will contain a watermark. | +| **What if the PDF already has an ExtGState entry?** | The code checks for an existing dictionary and reuses it, so you won’t lose any previously defined states. | +| **Can I set a different blend mode?** | Absolutely. Replace `"Normal"` with `"Multiply"`, `"Screen"`, or any PDF‑defined blend mode. | +| **Is `CA` mandatory?** | No. If you omit `CA`, the stroke opacity defaults to 1 (fully opaque). You can also set just `ca` for fill transparency. | +| **How do I apply the state to text?** | Use `canvas.SetExtGState("GS0")` before calling `canvas.ShowText(...)`. The same graphics state works for text, paths, and images. | + +--- + +## Next Steps + +Now + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [Add Image Stamps to PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [How to Add Page Stamps in PDFs Using Aspose.PDF for .NET: A Complete Guide](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/og-image.png b/pdf/english/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..bb2b20987dc073273461919ba5659e27d00eea4c GIT binary patch literal 45815 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 +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Ajouter de la transparence aux PDF avec Aspose.Pdf – Guide complet .NET + +Vous avez déjà eu besoin d'**ajouter de la transparence aux PDF** mais vous ne saviez pas quelles propriétés de l'API ajuster ? Vous n'êtes pas seul. Dans ce tutoriel, nous allons parcourir un exemple pratique, de bout en bout, qui montre exactement comment définir l'opacité d'un PDF, définir un mode de fusion et injecter un nouvel état graphique en utilisant **Aspose.Pdf for .NET**. + +Nous commencerons avec un PDF vierge, y ajouterons un rectangle semi‑transparent, puis enregistrerons le résultat — le tout en quelques lignes seulement. À la fin, vous comprendrez pourquoi le **dictionnaire ExtGState** est important, comment l'**état graphique** contrôle à la fois l'opacité du trait et du remplissage, et ce que fait le **mode de fusion** en interne. + +## Ce que vous allez apprendre + +- Comment charger un PDF existant avec Aspose.Pdf. +- Comment accéder et modifier le dictionnaire **ExtGState** d'une page. +- Comment créer un nouvel **état graphique** qui définit les entrées `CA`, `ca` et `BM`. +- Comment enregistrer le document modifié afin que l'effet de transparence soit visible dans n'importe quel lecteur PDF. +- Pièges courants (par ex., oublier d'ajouter le nouvel état au dictionnaire des ressources) et solutions rapides. + +> **Prérequis :** Visual Studio 2022 (ou tout autre IDE de votre choix), .NET 6 ou ultérieur, et une licence Aspose.Pdf for .NET (l'essai gratuit fonctionne pour cette démonstration). + +--- + +## Étape 1 : Charger le document PDF + +Première chose à faire — ouvrez le fichier que vous souhaitez modifier. La classe `Aspose.Pdf.Document` gère tout, du parsing à l'écriture. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Pourquoi c’est important :* Charger le document vous donne accès aux objets internes COS (Concrete Object Structure), qui sont l’endroit où vit l'**état graphique**. Sans une instance `Document` valide, vous ne pouvez pas atteindre le **dictionnaire ExtGState**. + +--- + +## Étape 2 : Récupérer la première page et son dictionnaire de ressources + +La transparence est appliquée au niveau des ressources de la page, nous avons donc besoin de la collection de ressources de la page. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Astuce :** Si vous travaillez avec des PDF multi‑pages, il suffit de parcourir `document.Pages` et de répéter les étapes pour chaque page que vous souhaitez affecter. + +--- + +## Étape 3 : Localiser (ou créer) le dictionnaire ExtGState + +L'entrée **ExtGState** stocke tous les états graphiques étendus de la page. Si elle n'existe pas encore, Aspose en créera une vide pour nous. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Explication :* +- `resourcesEditor["ExtGState"]` récupère le dictionnaire existant. +- L'opérateur de coalescence nulle (`??`) garantit que nous disposons toujours d'un dictionnaire avec lequel travailler, évitant ainsi une `NullReferenceException`. + +--- + +## Étape 4 : Construire un nouvel état graphique avec l'opacité PDF + +Nous définissons maintenant les paramètres réels de transparence. `CA` contrôle l'opacité du trait, `ca` contrôle l'opacité du remplissage, et `BM` définit le mode de fusion (par ex., « Normal », « Multiply », etc.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Pourquoi ces clés ?* +- `CA` (`Stroke opacity`) et `ca` (`Fill opacity`) sont les deux **entrées numériques** que la spécification PDF utilise pour exprimer la transparence. +- `BM` (`Blend mode`) indique au rendu comment **combiner** l'objet transparent avec l'arrière‑plan ; « Normal » est le choix le plus courant. + +--- + +## Étape 5 : Enregistrer le nouvel état dans le dictionnaire ExtGState + +Nous donnons à notre état graphique un nom (`GS0` dans cet exemple) et l'insérons dans la collection **ExtGState** de la page. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Conseil pro :** Choisissez un nom unique (`GS1`, `GS2`, …) si vous prévoyez d'ajouter plusieurs états. Réutiliser un nom écrasera l'entrée précédente. + +--- + +## Étape 6 : Appliquer l'état graphique au contenu (Optionnel mais recommandé) + +Si vous voulez voir l'effet de transparence immédiatement, vous pouvez dessiner un rectangle en utilisant l'état nouvellement créé. Cette étape n'est pas strictement requise pour *ajouter de la transparence aux PDF* — l'état est désormais disponible pour tout flux de contenu futur — mais elle vous aide à vérifier que tout fonctionne. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Explication :* +- `SetExtGState("GS0")` indique au flux de contenu d'utiliser l'état graphique que nous avons défini. +- Le rectangle apparaîtra avec une opacité de remplissage de 50 %, confirmant que les paramètres d'**opacité PDF** sont actifs. + +--- + +## Étape 7 : Enregistrer le PDF modifié + +Enfin, écrivez les modifications sur le disque. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Ouvrez `output.pdf` dans Adobe Acrobat, Foxit, ou même votre navigateur — vous devriez voir le rectangle semi‑transparent superposé au contenu de la page. + +--- + +## Exemple complet fonctionnel + +En réunissant le tout, voici le programme complet, prêt à copier‑coller : + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Résultat attendu + +- `output.pdf` contient les pages originales **plus** un rectangle rouge qui est transparent à 50 %. +- L'entrée **ExtGState** `GS0` fait maintenant partie du dictionnaire de ressources de la page, prête à être réutilisée. + +--- + +## Questions fréquentes et cas particuliers + +| Question | Réponse | +|----------|--------| +| **Ai‑je besoin d'une licence pour exécuter cela ?** | Une licence d'essai fonctionne pour le développement et les tests. En production, vous aurez besoin d'une licence payante, sinon le résultat contiendra un filigrane. | +| **Que se passe‑t‑il si le PDF possède déjà une entrée ExtGState ?** | Le code vérifie l'existence d'un dictionnaire et le réutilise, vous ne perdrez donc aucun état précédemment défini. | +| **Puis‑je définir un mode de fusion différent ?** | Absolument. Remplacez `"Normal"` par `"Multiply"`, `"Screen"` ou tout autre mode de fusion défini par le PDF. | +| **`CA` est‑il obligatoire ?** | Non. Si vous omettez `CA`, l'opacité du trait revient à 1 (complètement opaque). Vous pouvez également ne définir que `ca` pour la transparence du remplissage. | +| **Comment appliquer l'état au texte ?** | Utilisez `canvas.SetExtGState("GS0")` avant d'appeler `canvas.ShowText(...)`. Le même état graphique fonctionne pour le texte, les tracés et les images. | + +--- + +## Prochaines étapes + +Maintenant + +## Que devriez‑vous apprendre ensuite ? + +Les tutoriels suivants couvrent des sujets étroitement liés qui s'appuient sur les techniques démontrées dans ce guide. Chaque ressource comprend des exemples de code complets et fonctionnels avec des explications étape par étape pour vous aider à maîtriser des fonctionnalités supplémentaires de l'API et explorer des approches d'implémentation alternatives dans vos propres projets. + +- [Ajouter des tampons d'image aux PDF avec Aspose.PDF for .NET : guide étape par étape](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Comment ajouter un tampon de texte à un PDF avec Aspose.PDF .NET : guide complet](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [Comment ajouter des tampons de page aux PDF avec Aspose.PDF for .NET : guide complet](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/german/net/advanced-features/_index.md b/pdf/german/net/advanced-features/_index.md index 15eb638893..1f87acfc43 100644 --- a/pdf/german/net/advanced-features/_index.md +++ b/pdf/german/net/advanced-features/_index.md @@ -65,6 +65,9 @@ Lernen Sie, mit Aspose.PDF für .NET barrierefreie, formatierte und getaggte PDF ### [So vergleichen Sie PDFs in C# – Vollständige Anleitung zur Generierung von PDF-Differenzen](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Erfahren Sie, wie Sie mit Aspose.PDF für .NET PDFs vergleichen und Unterschiede (Diff) programmatisch ermitteln. +### [Transparenz zu PDF mit Aspose.Pdf hinzufügen – Vollständige .NET-Anleitung](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Erfahren Sie, wie Sie mit Aspose.Pdf für .NET Transparenz zu PDF-Dokumenten hinzufügen und komplexe Grafik‑Effekte umsetzen. + ## Weitere Ressourcen - [Aspose.PDF für Net-Dokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/german/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/german/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..56d44ca5b3 --- /dev/null +++ b/pdf/german/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-07-29 +description: Fügen Sie PDFs Transparenz hinzu mit Aspose.Pdf für .NET. Erfahren Sie, + wie Sie die PDF‑Deckkraft, den Mischmodus und den Grafikzustand in einer Schritt‑für‑Schritt‑Anleitung + einstellen. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: de +lastmod: 2026-07-29 +og_description: Fügen Sie PDFs schnell Transparenz hinzu. Dieser Leitfaden zeigt, + wie Sie die PDF‑Deckkraft und den Mischmodus mit Aspose.Pdf für .NET einstellen. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Transparenz zu PDF hinzufügen mit Aspose.Pdf – Vollständiger .NET-Leitfaden +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Transparenz zu PDF hinzufügen mit Aspose.Pdf – Vollständiger .NET-Leitfaden +url: /de/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Transparenz zu PDF hinzufügen mit Aspose.Pdf – Vollständige .NET-Anleitung + +Haben Sie jemals **Transparenz zu PDF**‑Dateien hinzufügen müssen, waren sich aber nicht sicher, welche API‑Eigenschaften Sie anpassen müssen? Sie sind nicht allein. In diesem Tutorial führen wir Sie durch ein praktisches, End‑to‑End‑Beispiel, das genau zeigt, wie man die PDF‑Opazität einstellt, einen Blend‑Modus definiert und einen neuen Graphics‑State mit **Aspose.Pdf for .NET** einfügt. + +Wir beginnen mit einem leeren PDF, streuen ein halbtransparentes Rechteck ein und speichern das Ergebnis – alles in nur wenigen Zeilen. Am Ende verstehen Sie, warum das **ExtGState‑Dictionary** wichtig ist, wie der **Graphics‑State** sowohl Strich‑ als auch Füll‑Opazität steuert und was der **Blend‑Modus** im Hintergrund bewirkt. + +## Was Sie lernen werden + +- Wie man ein vorhandenes PDF mit Aspose.Pdf lädt. +- Wie man das **ExtGState**‑Dictionary einer Seite zugreift und es ändert. +- Wie man einen neuen **graphics state** erstellt, der die Einträge `CA`, `ca` und `BM` definiert. +- Wie man das geänderte Dokument speichert, sodass der Transparenzeffekt in jedem PDF‑Betrachter sichtbar ist. +- Häufige Fallstricke (z. B. das Vergessen, den neuen State zum Resource‑Dictionary hinzuzufügen) und schnelle Lösungen. + +> **Voraussetzungen:** Visual Studio 2022 (oder eine beliebige IDE Ihrer Wahl), .NET 6 oder höher, und eine Aspose.Pdf for .NET‑Lizenz (die kostenlose Testversion funktioniert für diese Demo). + +--- + +## Schritt 1: PDF‑Dokument laden + +Zuerst öffnen Sie die Datei, die Sie bearbeiten möchten. Die Klasse `Aspose.Pdf.Document` übernimmt alles vom Parsen bis zum Schreiben. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Warum das wichtig ist:* Das Laden des Dokuments gibt Ihnen Zugriff auf die internen COS (Concrete Object Structure)‑Objekte, in denen der **graphics state** lebt. Ohne eine gültige `Document`‑Instanz können Sie das **ExtGState‑Dictionary** nicht erreichen. + +--- + +## Schritt 2: Erste Seite und ihr Resource‑Dictionary holen + +Transparenz wird auf Ebene des Seiten‑Resource‑Scopes angewendet, daher benötigen wir die Ressourcensammlung der Seite. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Tipp:** Wenn Sie mit mehrseitigen PDFs arbeiten, iterieren Sie einfach über `document.Pages` und wiederholen die Schritte für jede Seite, die Sie beeinflussen möchten. + +--- + +## Schritt 3: Das ExtGState‑Dictionary finden (oder erstellen) + +Der **ExtGState**‑Eintrag speichert alle erweiterten Graphics‑States für die Seite. Existiert er noch nicht, erstellt Aspose automatisch ein leeres. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Erklärung:* +- `resourcesEditor["ExtGState"]` ruft das vorhandene Dictionary ab. +- Der Null‑Coalescing‑Operator (`??`) stellt sicher, dass wir immer ein Dictionary zur Verfügung haben, wodurch eine `NullReferenceException` vermieden wird. + +--- + +## Schritt 4: Einen neuen Graphics‑State mit PDF‑Opazität bauen + +Jetzt definieren wir die eigentlichen Transparenz‑Parameter. `CA` steuert die Strich‑Opazität, `ca` die Füll‑Opazität, und `BM` legt den Blend‑Modus fest (z. B. „Normal“, „Multiply“ usw.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Warum diese Schlüssel?* +- `CA` (`Stroke opacity`) und `ca` (`Fill opacity`) sind die beiden numerischen Einträge, die die PDF‑Spezifikation zur Darstellung von Transparenz verwendet. +- `BM` (`Blend mode`) gibt dem Renderer an, wie das transparente Objekt mit dem Hintergrund kombiniert wird; „Normal“ ist die häufigste Wahl. + +--- + +## Schritt 5: Den neuen State im ExtGState‑Dictionary registrieren + +Wir geben unserem Graphics‑State einen Namen (`GS0` in diesem Beispiel) und fügen ihn in die **ExtGState**‑Sammlung der Seite ein. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Pro‑Tipp:** Wählen Sie einen eindeutigen Namen (`GS1`, `GS2`, …), wenn Sie mehrere States hinzufügen wollen. Das Wiederverwenden eines Namens überschreibt den vorherigen Eintrag. + +--- + +## Schritt 6: Den Graphics‑State auf den Inhalt anwenden (optional, aber empfohlen) + +Wenn Sie den Transparenzeffekt sofort sehen möchten, können Sie ein Rechteck mit dem neu erstellten State zeichnen. Dieser Schritt ist nicht zwingend erforderlich, um *Transparenz zu PDF* hinzuzufügen – der State steht jetzt für zukünftige Content‑Streams bereit – hilft aber, alles zu verifizieren. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Erklärung:* +- `SetExtGState("GS0")` weist den Content‑Stream an, den von uns definierten Graphics‑State zu verwenden. +- Das Rechteck wird mit 50 % Füll‑Opazität angezeigt, was bestätigt, dass die **PDF‑Opacity**‑Einstellungen aktiv sind. + +--- + +## Schritt 7: Das modifizierte PDF speichern + +Abschließend schreiben wir die Änderungen zurück auf die Festplatte. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Öffnen Sie `output.pdf` in Adobe Acrobat, Foxit oder sogar Ihrem Browser – Sie sollten das halbtransparente Rechteck über dem Seiteninhalt sehen. + +--- + +## Vollständiges funktionierendes Beispiel + +Hier ist das komplette, copy‑paste‑bereite Programm: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Erwartete Ausgabe + +- `output.pdf` enthält die ursprünglichen Seiten **plus** ein rotes Rechteck, das zu 50 % transparent ist. +- Der **ExtGState**‑Eintrag `GS0` ist nun Teil des Resource‑Dictionary der Seite und bereit zur Wiederverwendung. + +--- + +## Häufige Fragen & Sonderfälle + +| Frage | Antwort | +|----------|--------| +| **Brauche ich eine Lizenz, um das auszuführen?** | Eine Testlizenz funktioniert für Entwicklung und Tests. Für die Produktion benötigen Sie eine kostenpflichtige Lizenz, sonst enthält die Ausgabe ein Wasserzeichen. | +| **Was ist, wenn das PDF bereits einen ExtGState‑Eintrag hat?** | Der Code prüft, ob ein vorhandenes Dictionary existiert und verwendet es erneut, sodass Sie keine zuvor definierten States verlieren. | +| **Kann ich einen anderen Blend‑Modus festlegen?** | Ja. Ersetzen Sie „Normal“ durch „Multiply“, „Screen“ oder einen anderen PDF‑definierten Blend‑Modus. | +| **Ist `CA` zwingend erforderlich?** | Nein. Wenn Sie `CA` weglassen, wird die Strich‑Opazität standardmäßig auf 1 (vollständig undurchsichtig) gesetzt. Sie können auch nur `ca` für die Füll‑Transparenz setzen. | +| **Wie wende ich den State auf Text an?** | Verwenden Sie `canvas.SetExtGState("GS0")` bevor Sie `canvas.ShowText(...)` aufrufen. Der gleiche Graphics‑State funktioniert für Text, Pfade und Bilder. | + +--- + +## Nächste Schritte + +Jetzt + +## Was sollten Sie als Nächstes lernen? + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige, funktionierende Code‑Beispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, zusätzliche API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Bildstempel zu PDFs hinzufügen mit Aspose.PDF für .NET: Eine Schritt‑für‑Schritt‑Anleitung](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Wie man einen Textstempel zu PDF hinzufügt mit Aspose.PDF .NET: Umfassende Anleitung](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [Wie man Seitenstempel in PDFs hinzufügt mit Aspose.PDF für .NET: Ein vollständiger Leitfaden](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/greek/net/advanced-features/_index.md b/pdf/greek/net/advanced-features/_index.md index d8a8214bd4..e22b4b86f6 100644 --- a/pdf/greek/net/advanced-features/_index.md +++ b/pdf/greek/net/advanced-features/_index.md @@ -65,6 +65,9 @@ ### [Πώς να συγκρίνετε PDF σε C# – Πλήρης οδηγός δημιουργίας διαφοράς PDF](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Μάθετε πώς να συγκρίνετε αρχεία PDF χρησιμοποιώντας C# και το Aspose.PDF, δημιουργώντας ακριβείς διαφορές PDF. +### [Προσθήκη διαφάνειας σε PDF με το Aspose.Pdf – Πλήρης οδηγός .NET](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Μάθετε πώς να εφαρμόζετε διαφάνεια σε έγγραφα PDF χρησιμοποιώντας το Aspose.Pdf για .NET, με πλήρη παραδείγματα κώδικα. + ## Πρόσθετοι Πόροι - [Aspose.PDF για τεκμηρίωση δικτύου](https://docs.aspose.com/pdf/net/) diff --git a/pdf/greek/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/greek/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..54236c01de --- /dev/null +++ b/pdf/greek/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,254 @@ +--- +category: general +date: 2026-07-29 +description: Προσθέστε διαφάνεια σε PDF χρησιμοποιώντας το Aspose.Pdf για .NET. Μάθετε + πώς να ορίσετε τη διαφάνεια του PDF, τη λειτουργία ανάμειξης και την κατάσταση γραφικών + σε έναν βήμα‑βήμα οδηγό. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: el +lastmod: 2026-07-29 +og_description: Προσθέστε διαφάνεια σε PDF γρήγορα. Αυτός ο οδηγός δείχνει πώς να + ορίσετε τη διαφάνεια και τη λειτουργία ανάμειξης του PDF χρησιμοποιώντας το Aspose.Pdf + για .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Προσθήκη Διαφάνειας σε PDF με το Aspose.Pdf – Πλήρης Οδηγός .NET +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Προσθήκη διαφάνειας σε PDF με το Aspose.Pdf – Πλήρης οδηγός .NET +url: /el/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Προσθήκη Διαφάνειας σε PDF με Aspose.Pdf – Πλήρης Οδηγός .NET + +Έχετε χρειαστεί ποτέ να **προσθέσετε διαφάνεια σε αρχεία PDF** αλλά δεν ήσασταν σίγουροι ποιες ιδιότητες του API πρέπει να τροποποιήσετε; Δεν είστε μόνοι. Σε αυτόν τον οδηγό θα περάσουμε από ένα πρακτικό, ολοκληρωμένο παράδειγμα που δείχνει ακριβώς πώς να ορίσετε τη διαφάνεια του PDF, να ορίσετε ένα blend mode και να εισάγετε μια νέα κατάσταση γραφικών χρησιμοποιώντας **Aspose.Pdf for .NET**. + +Θα ξεκινήσουμε με ένα κενό PDF, θα προσθέσουμε ένα ημιδιαφανές ορθογώνιο και θα αποθηκεύσουμε το αποτέλεσμα—όλα σε λίγες μόνο γραμμές. Στο τέλος θα καταλάβετε γιατί το **ExtGState dictionary** είναι σημαντικό, πώς η **graphics state** ελέγχει τόσο τη διαφάνεια του περιγράμματος όσο και του γεμίσματος, και τι κάνει το **Blend mode** στο παρασκήνιο. + +## Τι Θα Μάθετε + +- Πώς να φορτώσετε ένα υπάρχον PDF με Aspose.Pdf. +- Πώς να προσπελάσετε και να τροποποιήσετε το **ExtGState** dictionary σε μια σελίδα. +- Πώς να δημιουργήσετε μια νέα **graphics state** που ορίζει τις καταχωρήσεις `CA`, `ca` και `BM`. +- Πώς να αποθηκεύσετε το τροποποιημένο έγγραφο ώστε το εφέ διαφάνειας να είναι ορατό σε οποιονδήποτε προβολέα PDF. +- Συνηθισμένα λάθη (π.χ. η παράλειψη προσθήκης της νέας κατάστασης στο resource dictionary) και γρήγορες λύσεις. + +> **Προαπαιτούμενα:** Visual Studio 2022 (ή οποιοδήποτε IDE προτιμάτε), .NET 6 ή νεότερο, και άδεια Aspose.Pdf for .NET (η δωρεάν δοκιμή λειτουργεί για αυτή τη demo). + +--- + +## Βήμα 1: Φόρτωση του Εγγράφου PDF + +Πρώτα απ' όλα—ανοίξτε το αρχείο που θέλετε να επεξεργαστείτε. Η κλάση `Aspose.Pdf.Document` διαχειρίζεται τα πάντα, από την ανάλυση μέχρι τη γραφή. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Γιατί είναι σημαντικό:* Η φόρτωση του εγγράφου σας δίνει πρόσβαση στα εσωτερικά αντικείμενα COS (Concrete Object Structure), όπου ζει η **graphics state**. Χωρίς μια έγκυρη παρουσία `Document` δεν μπορείτε να φτάσετε στο **ExtGState dictionary**. + +## Βήμα 2: Λήψη της Πρώτης Σελίδας και του Resource Dictionary της + +Η διαφάνεια εφαρμόζεται στο επίπεδο των πόρων της σελίδας, επομένως χρειαζόμαστε τη συλλογή πόρων της σελίδας. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Συμβουλή:** Αν εργάζεστε με PDF πολλαπλών σελίδων, απλώς κάντε βρόχο πάνω στο `document.Pages` και επαναλάβετε τα βήματα για κάθε σελίδα που θέλετε να επηρεάσετε. + +## Βήμα 3: Εντοπισμός (ή Δημιουργία) του ExtGState Dictionary + +Η καταχώρηση **ExtGState** αποθηκεύει όλες τις εκτεταμένες καταστάσεις γραφικών για τη σελίδα. Αν δεν υπάρχει ακόμη, το Aspose θα δημιουργήσει ένα κενό για εμάς. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Εξήγηση:* +- `resourcesEditor["ExtGState"]` ανακτά το υπάρχον dictionary. +- Ο τελεστής συνένωσης null (`??`) εξασφαλίζει ότι έχουμε πάντα ένα dictionary για εργασία, αποτρέποντας ένα `NullReferenceException`. + +## Βήμα 4: Δημιουργία Νέας Graphics State με Διαφάνεια PDF + +Τώρα ορίζουμε τις πραγματικές παραμέτρους διαφάνειας. Το `CA` ελέγχει τη διαφάνεια του περιγράμματος, το `ca` τη διαφάνεια του γεμίσματος, και το `BM` ορίζει το blend mode (π.χ. “Normal”, “Multiply”, κλπ). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Γιατί αυτά τα κλειδιά;* +- `CA` (`Stroke opacity`) και `ca` (`Fill opacity`) είναι οι δύο αριθμητικές καταχωρήσεις που χρησιμοποιεί το πρότυπο PDF για να εκφράσει τη διαφάνεια. +- `BM` (`Blend mode`) λέει στον renderer πώς να συνδυάσει το διαφανές αντικείμενο με το φόντο· το “Normal” είναι η πιο κοινή επιλογή. + +## Βήμα 5: Καταχώρηση της Νέας Κατάστασης στο ExtGState Dictionary + +Δίνουμε στη graphics state μας ένα όνομα (`GS0` σε αυτό το παράδειγμα) και το τοποθετούμε στη συλλογή **ExtGState** της σελίδας. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Pro tip:** Επιλέξτε ένα μοναδικό όνομα (`GS1`, `GS2`, …) αν σκοπεύετε να προσθέσετε πολλαπλές καταστάσεις. Η επαναχρησιμοποίηση ενός ονόματος θα αντικαταστήσει την προηγούμενη καταχώρηση. + +## Βήμα 6: Εφαρμογή της Graphics State στο Περιεχόμενο (Προαιρετικό αλλά Συνιστώμενο) + +Αν θέλετε να δείτε αμέσως το εφέ διαφάνειας, μπορείτε να σχεδιάσετε ένα ορθογώνιο χρησιμοποιώντας τη νέα κατάσταση. Αυτό το βήμα δεν είναι αυστηρά απαραίτητο για *προσθήκη διαφάνειας σε PDF*—η κατάσταση είναι τώρα διαθέσιμη για οποιαδήποτε μελλοντικά streams περιεχομένου—αλλά σας βοηθά να επαληθεύσετε ότι όλα λειτουργούν. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Εξήγηση:* +- `SetExtGState("GS0")` λέει στο content stream να χρησιμοποιήσει τη graphics state που ορίσαμε. +- Το ορθογώνιο θα εμφανιστεί με 50 % διαφάνεια γεμίσματος, επιβεβαιώνοντας ότι οι ρυθμίσεις **PDF opacity** είναι ενεργές. + +## Βήμα 7: Αποθήκευση του Τροποποιημένου PDF + +Τέλος, γράψτε τις αλλαγές πίσω στο δίσκο. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Ανοίξτε το `output.pdf` στο Adobe Acrobat, Foxit ή ακόμη και στον περιηγητή σας—θα πρέπει να δείτε το ημιδιαφανές ορθογώνιο να επικαλύπτει το περιεχόμενο της σελίδας. + +## Πλήρες Παράδειγμα Εργασίας + +Συνδυάζοντας όλα τα παραπάνω, εδώ είναι το πλήρες, έτοιμο προς αντιγραφή πρόγραμμα: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Αναμενόμενο Αποτέλεσμα + +- Το `output.pdf` περιέχει τις αρχικές σελίδες **συν** ένα κόκκινο ορθογώνιο που είναι 50 % διαφανές. +- Η καταχώρηση **ExtGState** `GS0` είναι τώρα μέρος του resource dictionary της σελίδας, έτοιμη για επαναχρήση. + +## Συχνές Ερωτήσεις & Ακραίες Περιπτώσεις + +| Ερώτηση | Απάντηση | +|----------|--------| +| **Χρειάζομαι άδεια για να τρέξω αυτό;** | Μια δοκιμαστική άδεια λειτουργεί για ανάπτυξη και δοκιμές. Για παραγωγή θα χρειαστείτε πληρωμένη άδεια, διαφορετικά το αποτέλεσμα θα περιέχει υδατογράφημα. | +| **Τι γίνεται αν το PDF έχει ήδη καταχώρηση ExtGState;** | Ο κώδικας ελέγχει για υπάρχον dictionary και το επαναχρησιμοποιεί, ώστε να μην χάσετε προηγούμενες καταστάσεις. | +| **Μπορώ να ορίσω διαφορετικό blend mode;** | Απόλυτα. Αντικαταστήστε το `"Normal"` με `"Multiply"`, `"Screen"` ή οποιοδήποτε blend mode ορίζεται στο PDF. | +| **Είναι το `CA` υποχρεωτικό;** | Όχι. Αν παραλείψετε το `CA`, η διαφάνεια του περιγράμματος προεπιλέγεται σε 1 (πλήρως αδιαφανές). Μπορείτε επίσης να ορίσετε μόνο το `ca` για διαφάνεια γεμίσματος. | +| **Πώς εφαρμόζω την κατάσταση σε κείμενο;** | Χρησιμοποιήστε `canvas.SetExtGState("GS0")` πριν καλέσετε `canvas.ShowText(...)`. Η ίδια graphics state λειτουργεί για κείμενο, μονοπάτια και εικόνες. | + +## Επόμενα Βήματα + +Τώρα + +## Τι Θα Πρέπει Να Μάθετε Στη Σύντομη Μελλοντική Περίοδο; + +Τα παρακάτω tutorials καλύπτουν στενά συναφή θέματα που επεκτείνουν τις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κυριαρχήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Προσθήκη Σφραγίδων Εικόνας σε PDF χρησιμοποιώντας Aspose.PDF for .NET: Οδηγός Βήμα προς Βήμα](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Πώς να Προσθέσετε Σφραγίδα Κειμένου σε PDF χρησιμοποιώντας Aspose.PDF .NET: Εκτενής Οδηγός](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [Πώς να Προσθέσετε Σφραγίδες Σελίδας σε PDF χρησιμοποιώντας Aspose.PDF for .NET: Πλήρης Οδηγός](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hindi/net/advanced-features/_index.md b/pdf/hindi/net/advanced-features/_index.md index 6bd363a18f..e495b801b4 100644 --- a/pdf/hindi/net/advanced-features/_index.md +++ b/pdf/hindi/net/advanced-features/_index.md @@ -62,7 +62,8 @@ PDF/UA-1 मानक के अनुसार सुलभ PDF दस्ता ### [Aspose.PDF .NET के साथ सुलभ PDF निर्माण में महारत हासिल करना: स्टाइल्ड टेबल्स के साथ टैग किए गए PDF तैयार करना](./aspose-pdf-net-tagged-pdfs-styled-tables/) ### [C# में PDFs की तुलना कैसे करें – PDF डिफ़ जेनरेट करने का पूर्ण गाइड](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) -C# में Aspose.PDF का उपयोग करके दो PDF फ़ाइलों की तुलना करने और अंतर (डिफ) उत्पन्न करने की पूरी प्रक्रिया सीखें। + +### [Aspose.Pdf के साथ PDF में पारदर्शिता जोड़ें – पूर्ण .NET गाइड](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) ## अतिरिक्त संसाधन diff --git a/pdf/hindi/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/hindi/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..264fb678ca --- /dev/null +++ b/pdf/hindi/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-07-29 +description: Aspose.Pdf for .NET का उपयोग करके PDF में पारदर्शिता जोड़ें। चरण‑दर‑चरण + ट्यूटोरियल में PDF की अपारदर्शिता, ब्लेंड मोड और ग्राफ़िक्स स्टेट सेट करना सीखें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: hi +lastmod: 2026-07-29 +og_description: PDF में शीघ्रता से पारदर्शिता जोड़ें। यह गाइड Aspose.Pdf for .NET + का उपयोग करके PDF की अपारदर्शिता और ब्लेंड मोड सेट करने का तरीका दिखाता है। +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Aspose.Pdf के साथ PDF में पारदर्शिता जोड़ें – पूर्ण .NET मार्गदर्शिका +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Aspose.Pdf के साथ PDF में पारदर्शिता जोड़ें – पूर्ण .NET गाइड +url: /hi/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + +क्या आपको कभी **PDF फ़ाइलों में ट्रांसपेरेंसी जोड़नी** पड़ी है लेकिन यह नहीं पता था कि कौन से API प्रॉपर्टीज़ बदलें? आप अकेले नहीं हैं। इस ट्यूटोरियल में हम एक व्यावहारिक, एंड‑टू‑एंड उदाहरण के माध्यम से दिखाएंगे कि PDF की अपारदर्शिता कैसे सेट करें, ब्लेंड मोड कैसे परिभाषित करें, और **Aspose.Pdf for .NET** का उपयोग करके नया ग्राफ़िक्स स्टेट कैसे इंजेक्ट करें। + +हम एक खाली PDF से शुरू करेंगे, उसमें एक अर्ध‑पारदर्शी आयत जोड़ेंगे, और परिणाम को सहेजेंगे—सिर्फ कुछ ही लाइनों में। अंत तक आप समझेंगे कि **ExtGState डिक्शनरी** क्यों महत्वपूर्ण है, **ग्राफ़िक्स स्टेट** कैसे स्ट्रोक और फ़िल अपारदर्शिता दोनों को नियंत्रित करता है, और **ब्लेंड मोड** पर्दे के नीचे क्या करता है। + +## What You’ll Learn + +- Aspose.Pdf के साथ मौजूदा PDF को कैसे लोड करें। +- पेज पर **ExtGState** डिक्शनरी को कैसे एक्सेस और मॉडिफ़ाई करें। +- नया **ग्राफ़िक्स स्टेट** कैसे बनाएं जो `CA`, `ca`, और `BM` एंट्रीज़ को परिभाषित करता है। +- बदले हुए डॉक्यूमेंट को कैसे सेव करें ताकि ट्रांसपेरेंसी इफ़ेक्ट किसी भी PDF व्यूअर में दिखे। +- सामान्य pitfalls (जैसे, नया स्टेट रिसोर्स डिक्शनरी में जोड़ना भूल जाना) और उनके त्वरित समाधान। + +> **Prerequisites:** Visual Studio 2022 (या कोई भी IDE जो आप पसंद करते हैं), .NET 6 या बाद का संस्करण, और Aspose.Pdf for .NET लाइसेंस (डेमो के लिए फ्री ट्रायल काम करता है)। + +--- + +## Step 1: Load the PDF Document + +सबसे पहले—उस फ़ाइल को खोलें जिसे आप एडिट करना चाहते हैं। `Aspose.Pdf.Document` क्लास पार्सिंग से लेकर राइटिंग तक सब संभालती है। + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Why this matters:* डॉक्यूमेंट को लोड करने से आपको अंदरूनी COS (Concrete Object Structure) ऑब्जेक्ट्स तक पहुंच मिलती है, जहाँ **ग्राफ़िक्स स्टेट** रहता है। वैध `Document` इंस्टेंस के बिना आप **ExtGState डिक्शनरी** तक नहीं पहुंच सकते। + +--- + +## Step 2: Grab the First Page and Its Resource Dictionary + +ट्रांसपेरेंसी पेज‑लेवल रिसोर्स स्कोप पर लागू होती है, इसलिए हमें पेज की रिसोर्स कलेक्शन चाहिए। + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Tip:** यदि आप मल्टी‑पेज PDFs के साथ काम कर रहे हैं, तो बस `document.Pages` पर लूप लगाएँ और प्रत्येक पेज के लिए ये स्टेप्स दोहराएँ जिसे आप प्रभावित करना चाहते हैं। + +--- + +## Step 3: Locate (or Create) the ExtGState Dictionary + +**ExtGState** एंट्री पेज के सभी एक्सटेंडेड ग्राफ़िक्स स्टेट्स को स्टोर करती है। यदि यह अभी तक मौजूद नहीं है, तो Aspose हमारे लिए एक खाली डिक्शनरी बना देगा। + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Explanation:* +- `resourcesEditor["ExtGState"]` मौजूदा डिक्शनरी को फ़ेच करता है। +- नल‑कोएलसिंग ऑपरेटर (`??`) सुनिश्चित करता है कि हमारे पास हमेशा काम करने के लिए एक डिक्शनरी हो, जिससे `NullReferenceException` से बचा जा सके। + +--- + +## Step 4: Build a New Graphics State with PDF Opacity + +अब हम वास्तविक ट्रांसपेरेंसी पैरामीटर्स परिभाषित करेंगे। `CA` स्ट्रोक अपारदर्शिता को नियंत्रित करता है, `ca` फ़िल अपारदर्शिता को, और `BM` ब्लेंड मोड सेट करता है (जैसे “Normal”, “Multiply” आदि)। + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Why these keys?* +- `CA` (`Stroke opacity`) और `ca` (`Fill opacity`) PDF स्पेसिफिकेशन द्वारा ट्रांसपेरेंसी व्यक्त करने के लिए दो न्यूमेरिक एंट्रीज़ हैं। +- `BM` (`Blend mode`) रेंडरर को बताता है कि ट्रांसपेरेंट ऑब्जेक्ट को बैकग्राउंड के साथ कैसे मिलाया जाए; “Normal” सबसे आम विकल्प है। + +--- + +## Step 5: Register the New State in the ExtGState Dictionary + +हम अपने ग्राफ़िक्स स्टेट को एक नाम देते हैं (`GS0` इस उदाहरण में) और इसे पेज की **ExtGState** कलेक्शन में डालते हैं। + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Pro tip:** यदि आप कई स्टेट्स जोड़ने की योजना बना रहे हैं तो एक यूनिक नाम (`GS1`, `GS2`, …) चुनें। नाम दोहराने से पहले वाला एंट्री ओवरराइट हो जाएगा। + +--- + +## Step 6: Apply the Graphics State to Content (Optional but Recommended) + +यदि आप तुरंत ट्रांसपेरेंसी इफ़ेक्ट देखना चाहते हैं, तो आप नए बनाए गए स्टेट का उपयोग करके एक आयत ड्रॉ कर सकते हैं। यह स्टेप *PDF में ट्रांसपेरेंसी जोड़ने* के लिए अनिवार्य नहीं है—स्टेट अब किसी भी भविष्य के कंटेंट स्ट्रीम के लिए उपलब्ध है—पर यह सब कुछ सही काम कर रहा है, यह वेरिफ़ाई करने में मदद करता है। + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Explanation:* +- `SetExtGState("GS0")` कंटेंट स्ट्रीम को बताता है कि वह हमारे परिभाषित ग्राफ़िक्स स्टेट का उपयोग करे। +- आयत 50 % फ़िल अपारदर्शिता के साथ दिखाई देगी, जिससे यह पुष्टि होगी कि **PDF अपारदर्शिता** सेटिंग्स सक्रिय हैं। + +--- + +## Step 7: Save the Modified PDF + +अंत में, बदलावों को डिस्क पर लिखें। + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +`output.pdf` को Adobe Acrobat, Foxit, या यहाँ तक कि अपने ब्राउज़र में खोलें—आपको पेज कंटेंट के ऊपर अर्ध‑पारदर्शी आयत दिखनी चाहिए। + +--- + +## Full Working Example + +सब कुछ एक साथ मिलाकर, यहाँ पूरा, कॉपी‑पेस्ट‑रेडी प्रोग्राम है: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Expected Output + +- `output.pdf` में मूल पेज **के साथ** एक लाल आयत होगी जो 50 % ट्रांसपेरेंट है। +- **ExtGState** एंट्री `GS0` अब पेज की रिसोर्स डिक्शनरी का हिस्सा है, पुनः उपयोग के लिए तैयार। + +--- + +## Common Questions & Edge Cases + +| Question | Answer | +|----------|--------| +| **Do I need a license to run this?** | एक ट्रायल लाइसेंस विकास और टेस्टिंग के लिए काम करता है। प्रोडक्शन के लिए आपको पेड लाइसेंस चाहिए, अन्यथा आउटपुट में वॉटरमार्क रहेगा। | +| **What if the PDF already has an ExtGState entry?** | कोड मौजूदा डिक्शनरी की जाँच करता है और उसे री‑यूज़ करता है, इसलिए पहले से परिभाषित स्टेट्स नहीं खोएँगे। | +| **Can I set a different blend mode?** | बिल्कुल। `"Normal"` को `"Multiply"`, `"Screen"` या किसी भी PDF‑डिफाइंड ब्लेंड मोड से बदल दें। | +| **Is `CA` mandatory?** | नहीं। यदि आप `CA` छोड़ देते हैं, तो स्ट्रोक अपारदर्शिता डिफॉल्ट रूप से 1 (पूरी तरह अपारदर्शी) रहती है। आप केवल `ca` सेट करके फ़िल ट्रांसपेरेंसी भी कर सकते हैं। | +| **How do I apply the state to text?** | `canvas.SetExtGState("GS0")` को `canvas.ShowText(...)` से पहले कॉल करें। वही ग्राफ़िक्स स्टेट टेक्स्ट, पाथ और इमेजेज़ सभी पर लागू होता है। | + +--- + +## Next Steps + +Now + + +## What Should You Learn Next? + + +निम्नलिखित ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक रिसोर्स में पूरी तरह कार्यशील कोड उदाहरण और स्टेप‑बाय‑स्टेप व्याख्याएँ शामिल हैं, जिससे आप अतिरिक्त API फीचर्स में महारत हासिल कर सकें और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन अप्रोचेज़ को एक्सप्लोर कर सकें। + +- [Add Image Stamps to PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [How to Add Page Stamps in PDFs Using Aspose.PDF for .NET: A Complete Guide](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/advanced-features/_index.md b/pdf/hongkong/net/advanced-features/_index.md index 972b143b7d..4acfb1d256 100644 --- a/pdf/hongkong/net/advanced-features/_index.md +++ b/pdf/hongkong/net/advanced-features/_index.md @@ -65,6 +65,9 @@ ### [如何在 C# 中比較 PDF – 生成 PDF 差異的完整指南](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) 了解如何使用 Aspose.PDF for .NET 在 C# 中比較兩個 PDF,生成差異報告並突出顯示變更。 +### [使用 Aspose.PDF 為 PDF 添加透明度 – 完整 .NET 指南](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +了解如何使用 Aspose.PDF for .NET 在 PDF 中添加透明度,提供完整步驟與範例程式碼。 + ## 其他資源 - [Aspose.PDF 用於網頁文檔](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hongkong/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/hongkong/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..5733aa6c33 --- /dev/null +++ b/pdf/hongkong/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-07-29 +description: 使用 Aspose.Pdf for .NET 為 PDF 加入透明效果。透過逐步教學學習如何設定 PDF 的不透明度、混合模式與圖形狀態。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: zh-hant +lastmod: 2026-07-29 +og_description: 快速為 PDF 添加透明度。本指南說明如何使用 Aspose.Pdf for .NET 設定 PDF 的不透明度與混合模式。 +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: 使用 Aspose.Pdf 為 PDF 添加透明度 – 完整 .NET 操作指南 +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: 使用 Aspose.Pdf 為 PDF 添加透明度 – 完整 .NET 指南 +url: /zh-hant/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 PDF 中加入透明度 – Aspose.Pdf 完整 .NET 指南 + +是否曾經需要在 **PDF** 檔案中**加入透明度**,卻不確定要調整哪個 API 屬性?你並不孤單。在本教學中,我們將逐步示範一個實用的端對端範例,說明如何設定 PDF 不透明度、定義混合模式,並使用 **Aspose.Pdf for .NET** 注入新的圖形狀態。 + +我們會從一個空白 PDF 開始,加入一個半透明矩形,然後儲存結果——只需幾行程式碼。完成後,你將了解 **ExtGState dictionary** 為何重要、**graphics state** 如何同時控制描邊與填充不透明度,以及 **Blend mode** 在底層的作用。 + +## 您將學會 + +- 如何使用 Aspose.Pdf 載入既有的 PDF。 +- 如何存取並修改頁面上的 **ExtGState** 字典。 +- 如何建立一個新的 **graphics state**,定義 `CA`、`ca` 與 `BM` 條目。 +- 如何儲存已修改的文件,使任何 PDF 檢視器都能看到透明效果。 +- 常見陷阱(例如忘記將新狀態加入資源字典)以及快速解決方法。 + +> **先備條件:** Visual Studio 2022(或任何你喜歡的 IDE)、.NET 6 或更新版本,以及 Aspose.Pdf for .NET 授權(免費試用版即可執行本示範)。 + +--- + +## 步驟 1:載入 PDF 文件 + +首先,打開你想編輯的檔案。`Aspose.Pdf.Document` 類別負責從解析到寫入的所有工作。 + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*為什麼這很重要:* 載入文件後,你即可存取內部的 COS(Concrete Object Structure)物件,圖形狀態正是儲存在那裡。沒有有效的 `Document` 實例,就無法取得 **ExtGState dictionary**。 + +--- + +## 步驟 2:取得第一頁及其資源字典 + +透明度是以頁面層級的資源範圍套用的,因此我們需要頁面的資源集合。 + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **提示:** 若你在處理多頁 PDF,只需遍歷 `document.Pages`,對每一個想要影響的頁面重複上述步驟。 + +--- + +## 步驟 3:定位(或建立)ExtGState 字典 + +**ExtGState** 條目儲存該頁面的所有擴充圖形狀態。若尚未存在,Aspose 會為我們建立一個空的字典。 + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*說明:* +- `resourcesEditor["ExtGState"]` 取得現有的字典。 +- 空值合併運算子 (`??`) 確保我們始終擁有可使用的字典,避免拋出 `NullReferenceException`。 + +--- + +## 步驟 4:建立具備 PDF 不透明度的全新圖形狀態 + +現在定義實際的透明度參數。`CA` 控制描邊不透明度,`ca` 控制填充不透明度,`BM` 設定混合模式(例如 “Normal”、 “Multiply”等)。 + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*為什麼要使用這些鍵?* +- `CA`(描邊不透明度)與 `ca`(填充不透明度)是 PDF 規範用來表達透明度的兩個數值條目。 +- `BM`(混合模式)告訴渲染器如何將透明物件與背景合併;“Normal” 是最常見的選擇。 + +--- + +## 步驟 5:將新狀態註冊至 ExtGState 字典 + +我們為圖形狀態取一個名稱(本例為 `GS0`),並將其放入頁面的 **ExtGState** 集合中。 + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **專業提示:** 若計畫加入多個狀態,請使用唯一名稱(`GS1`、`GS2`…)。重複使用名稱會覆寫先前的條目。 + +--- + +## 步驟 6:將圖形狀態套用至內容(可選但建議) + +如果想立即看到透明效果,可以使用新建立的狀態繪製一個矩形。此步驟對*在 PDF 中加入透明度*並非必須——狀態已可供未來的內容流使用——但有助於驗證一切正常。 + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*說明:* +- `SetExtGState("GS0")` 告訴內容串流使用我們定義的圖形狀態。 +- 矩形將以 50 % 填充不透明度呈現,證實 **PDF opacity** 設定已生效。 + +--- + +## 步驟 7:儲存已修改的 PDF + +最後,將變更寫回磁碟。 + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +在 Adobe Acrobat、Foxit 或甚至瀏覽器中開啟 `output.pdf`——你應該會看到半透明矩形覆蓋在頁面內容上。 + +--- + +## 完整可執行範例 + +以下是完整、可直接複製貼上的程式碼: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### 預期輸出 + +- `output.pdf` 包含原始頁面 **加上** 一個 50 % 透明的紅色矩形。 +- **ExtGState** 條目 `GS0` 已成為頁面資源字典的一部份,隨時可重複使用。 + +--- + +## 常見問題與邊緣案例 + +| 問題 | 解答 | +|----------|--------| +| **執行此程式是否需要授權?** | 試用授權可用於開發與測試。正式上線時需購買授權,否則輸出會帶有浮水印。 | +| **如果 PDF 已有 ExtGState 條目怎麼辦?** | 程式會檢查是否已有字典並重複使用,不會遺失先前定義的狀態。 | +| **可以設定其他混合模式嗎?** | 當然可以。將 `"Normal"` 替換為 `"Multiply"`、`"Screen"` 或任何 PDF 定義的混合模式即可。 | +| **`CA` 必須設定嗎?** | 不必。若省略 `CA`,描邊不透明度預設為 1(完全不透明)。你也可以只設定 `ca` 以實現填充透明度。 | +| **如何將此狀態套用到文字上?** | 在呼叫 `canvas.ShowText(...)` 前使用 `canvas.SetExtGState("GS0")`。相同的圖形狀態同時適用於文字、路徑與影像。 | + +--- + +## 下一步 + +現在 + +## 您接下來應該學習什麼? + +以下教學與本指南的技術緊密相關,提供完整的程式範例與逐步說明,協助你掌握更多 API 功能,並在自己的專案中探索其他實作方式。 + +- [使用 Aspose.PDF for .NET 為 PDF 添加圖像印章:一步一步指南](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [使用 Aspose.PDF .NET 為 PDF 添加文字印章:完整指南](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [使用 Aspose.PDF for .NET 為 PDF 添加頁面印章:完整指南](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hungarian/net/advanced-features/_index.md b/pdf/hungarian/net/advanced-features/_index.md index 530c1b49aa..3759e1c06f 100644 --- a/pdf/hungarian/net/advanced-features/_index.md +++ b/pdf/hungarian/net/advanced-features/_index.md @@ -23,6 +23,9 @@ Tanulja meg, hogyan férhet hozzá és módosíthatja a címkézett PDF-ek gyerm ### [Színes vonalrétegek hozzáadása PDF-ekhez az Aspose.PDF for .NET használatával: Átfogó útmutató](./add-colored-lines-pdfs-using-aspose-pdf-net/) Ismerje meg, hogyan javíthatja PDF dokumentumait színes vonalrétegek hozzáadásával az Aspose.PDF for .NET segítségével. Ez az útmutató lépésről lépésre bemutatja a gyakorlati alkalmazásokat. +### [Átlátszóság hozzáadása PDF-hez az Aspose.Pdf segítségével – Teljes .NET útmutató](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Ismerje meg, hogyan adhat hozzá átlátszó elemeket PDF-dokumentumokhoz az Aspose.Pdf .NET könyvtár segítségével. + ### [Aspose.PDF .NET: A PDF akadálymentesítésének javítása címkézéssel](./aspose-pdf-net-accessible-tagging-guide/) Tanulja meg az Aspose.PDF .NET használatát a PDF-ek akadálymentes címkézéséhez. Állítsa be egyszerűen a címeket, nyelveket és logikai struktúrákat. diff --git a/pdf/hungarian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/hungarian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..a5821236bd --- /dev/null +++ b/pdf/hungarian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-07-29 +description: Átlátszóság hozzáadása PDF-hez az Aspose.Pdf for .NET segítségével. Tanulja + meg beállítani a PDF átlátszóságát, keverési módját és grafikai állapotát egy lépésről‑lépésre + útmutatóban. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: hu +lastmod: 2026-07-29 +og_description: Adjon gyorsan átlátszóságot a PDF-hez. Ez az útmutató bemutatja, hogyan + állítható be a PDF átlátszósága és keverési módja az Aspose.Pdf for .NET használatával. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Átlátszóság hozzáadása PDF-hez az Aspose.Pdf segítségével – Teljes .NET + útmutató +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Átlátszóság hozzáadása PDF-hez az Aspose.Pdf segítségével – Teljes .NET útmutató +url: /hu/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Átlátszóság hozzáadása PDF-hez az Aspose.Pdf segítségével – Teljes .NET útmutató + +Valaha is szükséged volt **átlátszóság hozzáadására PDF** fájlokhoz, de nem tudtad, mely API tulajdonságokat kell módosítani? Nem vagy egyedül. Ebben az útmutatóban egy gyakorlati, vég‑től‑végig példán keresztül mutatjuk be, hogyan állítható be a PDF átlátszósága, hogyan definiálható egy keverési mód, és hogyan illeszthető be egy új grafikus állapot a **Aspose.Pdf for .NET** segítségével. + +Kezdetnek egy üres PDF-et használunk, belehelyezünk egy félig átlátszó téglalapot, és elmentjük az eredményt—csak néhány sor kóddal. A végére megérted, miért fontos a **ExtGState dictionary**, hogyan szabályozza a **graphics state** a vonal és a kitöltés átlátszóságát, és mit csinál a **Blend mode** a háttérben. + +## Mit fogsz megtanulni + +- Hogyan töltsünk be egy meglévő PDF-et az Aspose.Pdf segítségével. +- Hogyan érjük el és módosítsuk a **ExtGState** dictionary-t egy oldalon. +- Hogyan hozzunk létre egy új **graphics state**-et, amely definiálja a `CA`, `ca` és `BM` bejegyzéseket. +- Hogyan mentsük el a módosított dokumentumot, hogy az átlátszósági hatás bármely PDF-olvasóban látható legyen. +- Gyakori buktatók (pl. elfelejtjük hozzáadni az új állapotot a resource dictionary-hez) és gyors megoldások. + +> **Előfeltételek:** Visual Studio 2022 (vagy bármely kedvelt IDE), .NET 6 vagy újabb, és egy Aspose.Pdf for .NET licenc (az ingyenes próba verzió működik ebben a demóban). + +## 1. lépés: PDF dokumentum betöltése + +Először is—nyisd meg a szerkeszteni kívánt fájlt. Az `Aspose.Pdf.Document` osztály kezeli a beolvasástól a írásig minden lépést. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Miért fontos ez:* A dokumentum betöltése hozzáférést biztosít a belső COS (Concrete Object Structure) objektumokhoz, ahol a **graphics state** található. Érvényes `Document` példány nélkül nem érhető el a **ExtGState dictionary**. + +## 2. lépés: Az első oldal és annak erőforrás-szótára lekérése + +Az átlátszóság az oldal szintű erőforrás hatókörben kerül alkalmazásra, ezért szükségünk van az oldal erőforrás-gyűjteményére. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +**Tipp:** Ha többoldalas PDF-ekkel dolgozol, egyszerűen iterálj a `document.Pages`-en, és ismételd meg a lépéseket minden érintett oldalon. + +## 3. lépés: Az ExtGState Dictionary megtalálása (vagy létrehozása) + +A **ExtGState** bejegyzés tárolja az oldal összes kiterjesztett grafikus állapotát. Ha még nem létezik, az Aspose egy üreset hoz létre számunkra. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Magyarázat:* +- `resourcesEditor["ExtGState"]` lekéri a meglévő szótárt. +- A null‑koaleszcens operátor (`??`) biztosítja, hogy mindig legyen egy szótárunk, elkerülve a `NullReferenceException`-t. + +## 4. lépés: Új grafikus állapot létrehozása PDF átlátszósággal + +Most definiáljuk a tényleges átlátszósági paramétereket. A `CA` a vonal átlátszóságát, a `ca` a kitöltés átlátszóságát szabályozza, a `BM` pedig a keverési módot állítja be (pl. „Normal”, „Multiply”, stb.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Miért ezek a kulcsok?* +- `CA` (`Stroke opacity`) és `ca` (`Fill opacity`) a PDF specifikáció által az átlátszóság kifejezésére használt két numerikus bejegyzés. +- `BM` (`Blend mode`) megmondja a renderelőnek, hogyan kombinálja a átlátszó objektumot a háttérrel; a „Normal” a leggyakoribb választás. + +## 5. lépés: Az új állapot regisztrálása az ExtGState Dictionary-ben + +A grafikus állapotunknak nevet adunk (`GS0` ebben a példában), és beillesztjük az oldal **ExtGState** gyűjteményébe. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +**Pro tipp:** Válassz egy egyedi nevet (`GS1`, `GS2`, …), ha több állapotot szeretnél hozzáadni. Egy név újbóli használata felülírja a korábbi bejegyzést. + +## 6. lépés: Grafikus állapot alkalmazása a tartalomra (Opcionális, de ajánlott) + +Ha azonnal szeretnéd látni az átlátszósági hatást, rajzolhatsz egy téglalapot az újonnan létrehozott állapottal. Ez a lépés nem feltétlenül szükséges a *PDF átlátszóság hozzáadásához*—az állapot most már elérhető bármely jövőbeli tartalomfolyam számára, de segít ellenőrizni, hogy minden működik. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Magyarázat:* +- `SetExtGState("GS0")` azt mondja a tartalomfolyamnak, hogy használja a definiált grafikus állapotot. +- A téglalap 50 % kitöltési átlátszósággal jelenik meg, megerősítve, hogy a **PDF opacity** beállítások aktívak. + +## 7. lépés: Módosított PDF mentése + +Végül írjuk vissza a változtatásokat a lemezre. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Nyisd meg az `output.pdf`-et Adobe Acrobatban, Foxitban vagy akár a böngésződben—látni fogod a félig átlátszó téglalapot, amely az oldal tartalma felett helyezkedik el. + +## Teljes működő példa + +Összegezve, itt van a teljes, másolásra és beillesztésre kész program: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Várt kimenet + +- `output.pdf` tartalmazza az eredeti oldalakat **plusz** egy piros téglalapot, amely 50 % átlátszó. +- A **ExtGState** bejegyzés `GS0` most már az oldal erőforrás-szótárának része, készen áll újrahasználatra. + +## Gyakori kérdések és szélhelyzetek + +| Kérdés | Válasz | +|----------|--------| +| **Szükségem van licencre a futtatáshoz?** | A próbaverzió licenc fejlesztéshez és teszteléshez működik. Production környezetben fizetett licencre lesz szükség, különben a kimenet vízjelet tartalmaz. | +| **Mi van, ha a PDF már tartalmaz ExtGState bejegyzést?** | A kód ellenőrzi a meglévő szótárt és újra felhasználja, így nem veszítesz el korábban definiált állapotokat. | +| **Beállíthatok más keverési módot?** | Természetesen. Cseréld a `"Normal"`-t `"Multiply"`, `"Screen"` vagy bármely PDF‑definiált keverési módra. | +| **Kötelező a `CA`?** | Nem. Ha kihagyod a `CA`-t, a vonal átlátszósága alapértelmezés szerint 1 (teljesen átlátszatlan). A `ca`-t is beállíthatod csak a kitöltés átlátszóságához. | +| **Hogyan alkalmazom az állapotot szövegre?** | Használd a `canvas.SetExtGState("GS0")`-t a `canvas.ShowText(...)` hívása előtt. Ugyanaz a grafikus állapot működik szövegre, útvonalakra és képekre is. | + +## Következő lépések + +Most + +## Mit érdemes következőként megtanulni? + +A következő oktatóanyagok szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás tartalmaz teljes működő kódrészleteket lépésről‑lépésre magyarázatokkal, hogy segítsen elsajátítani további API funkciókat és alternatív megvalósítási megközelítéseket a saját projektjeidben. + +- [Képek pecsétek hozzáadása PDF-ekhez az Aspose.PDF for .NET: Lépésről‑lépésre útmutató](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Hogyan adjunk szövegpecsétet PDF-hez az Aspose.PDF .NET: Átfogó útmutató](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [Hogyan adjunk oldalpecséteket PDF-ekhez az Aspose.PDF for .NET: Teljes útmutató](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/indonesian/net/advanced-features/_index.md b/pdf/indonesian/net/advanced-features/_index.md index 89989ddcbd..8df7051e0b 100644 --- a/pdf/indonesian/net/advanced-features/_index.md +++ b/pdf/indonesian/net/advanced-features/_index.md @@ -65,6 +65,9 @@ Pelajari cara membuat dokumen PDF yang mudah diakses dan diberi tag dengan gaya ### [Cara Membandingkan PDF di C# – Panduan Lengkap Membuat PDF Diff](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Pelajari cara membandingkan dua file PDF menggunakan C# dan menghasilkan perbedaan PDF dengan Aspose.PDF. +### [Menambahkan Transparansi ke PDF dengan Aspose.Pdf – Panduan Lengkap .NET](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Pelajari cara menambahkan efek transparansi pada PDF menggunakan Aspose.Pdf untuk .NET dengan contoh kode lengkap. + ## Sumber Daya Tambahan - [Dokumentasi Aspose.PDF untuk Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/indonesian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/indonesian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..cc5c570383 --- /dev/null +++ b/pdf/indonesian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-07-29 +description: Tambahkan transparansi ke PDF menggunakan Aspose.Pdf untuk .NET. Pelajari + cara mengatur opasitas PDF, mode campuran, dan state grafis dalam tutorial langkah + demi langkah. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: id +lastmod: 2026-07-29 +og_description: Tambahkan transparansi ke PDF dengan cepat. Panduan ini menunjukkan + cara mengatur opasitas PDF dan mode campuran menggunakan Aspose.Pdf untuk .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Tambahkan Transparansi pada PDF dengan Aspose.Pdf – Panduan Lengkap .NET +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Tambahkan Transparansi ke PDF dengan Aspose.Pdf – Panduan .NET Lengkap +url: /id/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Tambahkan Transparansi ke PDF dengan Aspose.Pdf – Panduan Lengkap .NET + +Pernah membutuhkan untuk **menambahkan transparansi ke PDF** tetapi tidak yakin properti API mana yang harus diubah? Anda tidak sendirian. Dalam tutorial ini kami akan membahas contoh praktis, end‑to‑end yang menunjukkan secara tepat cara mengatur opacity PDF, mendefinisikan blend mode, dan menyisipkan graphics state baru menggunakan **Aspose.Pdf for .NET**. + +Kami akan memulai dengan PDF kosong, menambahkan sebuah persegi panjang semi‑transparan, dan menyimpan hasilnya—semua dalam beberapa baris kode. Pada akhir tutorial Anda akan memahami mengapa **dictionary ExtGState** penting, bagaimana **graphics state** mengontrol opacity stroke dan fill, serta apa yang dilakukan **Blend mode** di balik layar. + +## Apa yang Akan Anda Pelajari + +- Cara memuat PDF yang sudah ada dengan Aspose.Pdf. +- Cara mengakses dan memodifikasi dictionary **ExtGState** pada sebuah halaman. +- Cara membuat **graphics state** baru yang mendefinisikan entri `CA`, `ca`, dan `BM`. +- Cara menyimpan dokumen yang telah diubah sehingga efek transparansi terlihat di semua penampil PDF. +- Kesalahan umum (mis., lupa menambahkan state baru ke dictionary sumber daya) dan solusi cepat. + +> **Prasyarat:** Visual Studio 2022 (atau IDE apa pun yang Anda suka), .NET 6 atau lebih baru, dan lisensi Aspose.Pdf untuk .NET (versi trial gratis dapat digunakan untuk demo ini). + +--- + +## Langkah 1: Muat Dokumen PDF + +Langkah pertama—buka file yang ingin Anda edit. Kelas `Aspose.Pdf.Document` menangani semua hal mulai dari parsing hingga penulisan. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Mengapa ini penting:* Memuat dokumen memberi Anda akses ke objek internal COS (Concrete Object Structure), tempat **graphics state** berada. Tanpa instance `Document` yang valid Anda tidak dapat mengakses **dictionary ExtGState**. + +--- + +## Langkah 2: Ambil Halaman Pertama dan Dictionary Sumber Daya-nya + +Transparansi diterapkan pada lingkup sumber daya tingkat halaman, jadi kita memerlukan koleksi sumber daya halaman. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Tip:** Jika Anda bekerja dengan PDF multi‑halaman, cukup lakukan loop pada `document.Pages` dan ulangi langkah-langkah untuk setiap halaman yang ingin Anda ubah. + +--- + +## Langkah 3: Temukan (atau Buat) Dictionary ExtGState + +Entri **ExtGState** menyimpan semua extended graphics state untuk halaman. Jika belum ada, Aspose akan membuat satu yang kosong untuk kita. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Penjelasan:* +- `resourcesEditor["ExtGState"]` mengambil dictionary yang ada. +- Operator null‑coalescing (`??`) memastikan kita selalu memiliki dictionary untuk bekerja, mencegah `NullReferenceException`. + +--- + +## Langkah 4: Bangun Graphics State Baru dengan Opacity PDF + +Sekarang kita mendefinisikan parameter transparansi sebenarnya. `CA` mengontrol opacity stroke, `ca` mengontrol opacity fill, dan `BM` menentukan blend mode (mis., “Normal”, “Multiply”, dll.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Mengapa kunci ini?* +- `CA` (`Stroke opacity`) dan `ca` (`Fill opacity`) adalah dua entri numerik yang digunakan spesifikasi PDF untuk menyatakan transparansi. +- `BM` (`Blend mode`) memberi tahu renderer bagaimana menggabungkan objek transparan dengan latar belakang; “Normal” adalah pilihan paling umum. + +--- + +## Langkah 5: Daftarkan State Baru ke Dictionary ExtGState + +Kami memberi graphics state kami sebuah nama (`GS0` dalam contoh ini) dan menambahkannya ke koleksi **ExtGState** halaman. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Pro tip:** Pilih nama unik (`GS1`, `GS2`, …) jika Anda berencana menambahkan beberapa state. Menggunakan kembali nama yang sama akan menimpa entri sebelumnya. + +--- + +## Langkah 6: Terapkan Graphics State ke Konten (Opsional tetapi Disarankan) + +Jika Anda ingin melihat efek transparansi secara langsung, Anda dapat menggambar persegi panjang menggunakan state yang baru dibuat. Langkah ini tidak mutlak diperlukan untuk *menambahkan transparansi ke PDF*—state kini tersedia untuk aliran konten apa pun di masa depan—tetapi membantu Anda memverifikasi semuanya berfungsi. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Penjelasan:* +- `SetExtGState("GS0")` memberi tahu aliran konten untuk menggunakan graphics state yang kami definisikan. +- Persegi panjang akan muncul dengan 50 % fill opacity, mengonfirmasi bahwa pengaturan **opacity PDF** aktif. + +--- + +## Langkah 7: Simpan PDF yang Dimodifikasi + +Terakhir, tulis perubahan kembali ke disk. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Buka `output.pdf` di Adobe Acrobat, Foxit, atau bahkan browser Anda—Anda akan melihat persegi panjang semi‑transparan menutupi konten halaman. + +--- + +## Contoh Lengkap yang Berfungsi + +Menggabungkan semuanya, berikut program lengkap yang siap disalin‑tempel: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Output yang Diharapkan + +- `output.pdf` berisi halaman asli **ditambah** persegi panjang merah yang 50 % transparan. +- Entri **ExtGState** `GS0` kini menjadi bagian dari dictionary sumber daya halaman, siap untuk digunakan kembali. + +--- + +## Pertanyaan Umum & Kasus Tepi + +| Pertanyaan | Jawaban | +|------------|---------| +| **Apakah saya memerlukan lisensi untuk menjalankan ini?** | Lisensi trial dapat digunakan untuk pengembangan dan pengujian. Untuk produksi Anda memerlukan lisensi berbayar, jika tidak output akan berisi watermark. | +| **Bagaimana jika PDF sudah memiliki entri ExtGState?** | Kode memeriksa keberadaan dictionary dan menggunakannya kembali, sehingga Anda tidak kehilangan state yang sudah didefinisikan sebelumnya. | +| **Bisakah saya mengatur blend mode yang berbeda?** | Tentu saja. Ganti `"Normal"` dengan `"Multiply"`, `"Screen"`, atau blend mode lain yang didefinisikan PDF. | +| **Apakah `CA` wajib?** | Tidak. Jika Anda menghilangkan `CA`, opacity stroke default menjadi 1 (sepenuhnya opaque). Anda juga dapat hanya mengatur `ca` untuk transparansi fill. | +| **Bagaimana cara menerapkan state ke teks?** | Gunakan `canvas.SetExtGState("GS0")` sebelum memanggil `canvas.ShowText(...)`. Graphics state yang sama bekerja untuk teks, path, dan gambar. | + +--- + +## Langkah Selanjutnya + +Now + + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik yang terkait erat yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber daya menyertakan contoh kode lengkap yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan mengeksplorasi pendekatan implementasi alternatif dalam proyek Anda. + +- [Tambahkan Stempel Gambar ke PDF Menggunakan Aspose.PDF for .NET: Panduan Langkah demi Langkah](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Cara Menambahkan Stempel Teks ke PDF Menggunakan Aspose.PDF .NET: Panduan Komprehensif](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [Cara Menambahkan Stempel Halaman di PDF Menggunakan Aspose.PDF for .NET: Panduan Lengkap](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/italian/net/advanced-features/_index.md b/pdf/italian/net/advanced-features/_index.md index 4a7289a707..bc9f42bc58 100644 --- a/pdf/italian/net/advanced-features/_index.md +++ b/pdf/italian/net/advanced-features/_index.md @@ -65,6 +65,9 @@ Impara a creare documenti PDF accessibili, formattati e taggati utilizzando Aspo ### [Come confrontare i PDF in C# – Guida completa alla generazione di PDF Diff](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Scopri come confrontare PDF in C# e generare un file di differenza PDF usando Aspose.PDF per .NET. +### [Aggiungere trasparenza ai PDF con Aspose.Pdf – Guida completa .NET](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Scopri come applicare effetti di trasparenza ai PDF usando Aspose.Pdf per .NET con esempi di codice C# dettagliati. + ## Risorse aggiuntive - [Aspose.PDF per la documentazione di rete](https://docs.aspose.com/pdf/net/) diff --git a/pdf/italian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/italian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..295d65dd29 --- /dev/null +++ b/pdf/italian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-07-29 +description: Aggiungi trasparenza ai PDF usando Aspose.Pdf per .NET. Impara a impostare + l'opacità del PDF, la modalità di fusione e lo stato grafico in un tutorial passo‑passo. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: it +lastmod: 2026-07-29 +og_description: Aggiungi trasparenza ai PDF rapidamente. Questa guida mostra come + impostare l'opacità e la modalità di fusione dei PDF usando Aspose.Pdf per .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Aggiungi trasparenza al PDF con Aspose.Pdf – Guida completa .NET +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Aggiungi trasparenza ai PDF con Aspose.Pdf – Guida completa .NET +url: /it/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aggiungere Trasparenza a PDF con Aspose.Pdf – Guida Completa .NET + +Hai mai avuto bisogno di **aggiungere trasparenza a PDF** ma non sapevi quali proprietà dell'API modificare? Non sei il solo. In questo tutorial ti guideremo attraverso un esempio pratico, end‑to‑end, che mostra esattamente come impostare l'opacità di un PDF, definire una modalità di fusione e inserire un nuovo stato grafico usando **Aspose.Pdf for .NET**. + +Inizieremo con un PDF vuoto, aggiungeremo un rettangolo semi‑trasparente e salveremo il risultato—tutto in poche righe di codice. Alla fine comprenderai perché il **dizionario ExtGState** è importante, come lo **stato grafico** controlla sia l'opacità del tratto che del riempimento, e cosa fa la **modalità di fusione** dietro le quinte. + +## Cosa Imparerai + +- Come caricare un PDF esistente con Aspose.Pdf. +- Come accedere e modificare il dizionario **ExtGState** di una pagina. +- Come creare un nuovo **stato grafico** che definisce le voci `CA`, `ca` e `BM`. +- Come salvare il documento modificato affinché l'effetto di trasparenza sia visibile in qualsiasi visualizzatore PDF. +- Errori comuni (ad esempio, dimenticare di aggiungere il nuovo stato al dizionario delle risorse) e soluzioni rapide. + +> **Prerequisiti:** Visual Studio 2022 (o qualsiasi IDE tu preferisca), .NET 6 o successivo, e una licenza Aspose.Pdf per .NET (la versione di prova gratuita funziona per questa dimostrazione). + +--- + +## Passo 1: Caricare il Documento PDF + +Prima di tutto—apri il file che desideri modificare. La classe `Aspose.Pdf.Document` gestisce tutto, dalla lettura alla scrittura. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Perché è importante:* Caricare il documento ti dà accesso agli oggetti COS (Concrete Object Structure) interni, dove risiede lo **stato grafico**. Senza un'istanza valida di `Document` non puoi raggiungere il **dizionario ExtGState**. + +--- + +## Passo 2: Ottenere la Prima Pagina e il Suo Dizionario delle Risorse + +La trasparenza viene applicata a livello di risorse della pagina, quindi abbiamo bisogno della collezione di risorse della pagina. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +**Suggerimento:** Se lavori con PDF multi‑pagina, basta iterare su `document.Pages` e ripetere i passaggi per ogni pagina che desideri modificare. + +--- + +## Passo 3: Individuare (o Creare) il Dizionario ExtGState + +La voce **ExtGState** memorizza tutti gli stati grafici estesi per la pagina. Se non esiste ancora, Aspose ne creerà uno vuoto per noi. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Spiegazione:* +- `resourcesEditor["ExtGState"]` recupera il dizionario esistente. +- L'operatore di coalescenza nulla (`??`) garantisce di avere sempre un dizionario con cui lavorare, evitando un `NullReferenceException`. + +--- + +## Passo 4: Costruire un Nuovo Stato Grafico con Opacità PDF + +Ora definiamo i parametri effettivi della trasparenza. `CA` controlla l'opacità del tratto, `ca` controlla l'opacità del riempimento, e `BM` imposta la modalità di fusione (ad esempio, “Normal”, “Multiply”, ecc.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Perché queste chiavi?* +- `CA` (`Stroke opacity`) e `ca` (`Fill opacity`) sono le due voci numeriche che la specifica PDF utilizza per esprimere la trasparenza. +- `BM` (`Blend mode`) indica al renderer come combinare l'oggetto trasparente con lo sfondo; “Normal” è la scelta più comune. + +--- + +## Passo 5: Registrare il Nuovo Stato nel Dizionario ExtGState + +Assegniamo al nostro stato grafico un nome (`GS0` in questo esempio) e lo inseriamo nella collezione **ExtGState** della pagina. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +**Consiglio professionale:** Scegli un nome unico (`GS1`, `GS2`, …) se prevedi di aggiungere più stati. Riutilizzare un nome sovrascriverà l'entrata precedente. + +--- + +## Passo 6: Applicare lo Stato Grafico al Contenuto (Opzionale ma Consigliato) + +Se vuoi vedere immediatamente l'effetto di trasparenza, puoi disegnare un rettangolo usando lo stato appena creato. Questo passaggio non è strettamente necessario per *aggiungere trasparenza a PDF*—lo stato è ora disponibile per qualsiasi flusso di contenuto futuro, ma ti aiuta a verificare che tutto funzioni. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Spiegazione:* +- `SetExtGState("GS0")` indica al flusso di contenuto di utilizzare lo stato grafico che abbiamo definito. +- Il rettangolo apparirà con un'opacità di riempimento del 50 %, confermando che le impostazioni di **opacità PDF** sono attive. + +--- + +## Passo 7: Salvare il PDF Modificato + +Infine, scrivi le modifiche su disco. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Apri `output.pdf` in Adobe Acrobat, Foxit o anche nel tuo browser—dovresti vedere il rettangolo semi‑trasparente sovrapposto al contenuto della pagina. + +--- + +## Esempio Completo Funzionante + +Mettendo tutto insieme, ecco il programma completo, pronto per il copia‑incolla: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Output Atteso + +- `output.pdf` contiene le pagine originali **più** un rettangolo rosso con trasparenza del 50 %. +- La voce **ExtGState** `GS0` è ora parte del dizionario delle risorse della pagina, pronta per essere riutilizzata. + +--- + +## Domande Frequenti & Casi Limite + +| Domanda | Risposta | +|----------|--------| +| **Ho bisogno di una licenza per eseguire questo?** | Una licenza di prova funziona per sviluppo e test. Per la produzione avrai bisogno di una licenza a pagamento, altrimenti l'output conterrà un watermark. | +| **Cosa succede se il PDF ha già una voce ExtGState?** | Il codice verifica la presenza di un dizionario esistente e lo riutilizza, quindi non perderai stati precedentemente definiti. | +| **Posso impostare una modalità di fusione diversa?** | Assolutamente. Sostituisci `"Normal"` con `"Multiply"`, `"Screen"` o qualsiasi modalità di fusione definita nel PDF. | +| **`CA` è obbligatorio?** | No. Se ometti `CA`, l'opacità del tratto predefinita è 1 (completamente opaco). Puoi anche impostare solo `ca` per la trasparenza del riempimento. | +| **Come applico lo stato al testo?** | Usa `canvas.SetExtGState("GS0")` prima di chiamare `canvas.ShowText(...)`. Lo stesso stato grafico funziona per testo, percorsi e immagini. | + +## Prossimi Passi + +Ora + +## Cosa Dovresti Imparare Dopo? + +- [Aggiungere Timbri Immagine ai PDF con Aspose.PDF per .NET: Guida Passo‑Passo](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Come Aggiungere un Timbro Testo a PDF con Aspose.PDF .NET: Guida Completa](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [Come Aggiungere Timbri di Pagina nei PDF con Aspose.PDF per .NET: Guida Completa](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/japanese/net/advanced-features/_index.md b/pdf/japanese/net/advanced-features/_index.md index dde6405ba9..13e46ee0ae 100644 --- a/pdf/japanese/net/advanced-features/_index.md +++ b/pdf/japanese/net/advanced-features/_index.md @@ -65,6 +65,9 @@ Aspose.PDF for .NET を使用して、アクセシビリティ対応でスタイ ### [C#でPDFを比較する方法 – PDF差分生成の完全ガイド](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) C# と Aspose.PDF を使用して、PDF の差分を生成し、比較する方法を学びます。 +### [Aspose.PDF for .NET を使用して PDF に透明性を追加する – 完全ガイド](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Aspose.PDF for .NET を使って PDF に透明オブジェクトや画像を追加し、透過効果を実装する方法を学びます。 + ## 追加リソース - [Aspose.PDF for Net ドキュメント](https://docs.aspose.com/pdf/net/) diff --git a/pdf/japanese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/japanese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..3bdb1d8326 --- /dev/null +++ b/pdf/japanese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,269 @@ +--- +category: general +date: 2026-07-29 +description: .NET 用 Aspose.Pdf を使用して PDF に透明性を追加します。ステップバイステップのチュートリアルで、PDF の不透明度、ブレンドモード、グラフィックスステートの設定方法を学びましょう。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: ja +lastmod: 2026-07-29 +og_description: PDFに透明性をすばやく追加します。このガイドでは、Aspose.Pdf for .NET を使用して PDF の不透明度とブレンドモードを設定する方法を示します。 +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Aspose.PdfでPDFに透明性を追加 – 完全な.NETウォークスルー +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Aspose.PdfでPDFに透明性を追加する – 完全.NETガイド +url: /ja/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.PdfでPDFに透明性を追加 – 完全 .NET ガイド + +PDF ファイルに **透明性を追加** したいけれど、どの API プロパティを調整すればよいか分からないことはありませんか?このチュートリアルでは、実用的なエンドツーエンドの例を通じて、PDF の不透明度の設定方法、ブレンドモードの定義方法、そして **Aspose.Pdf for .NET** を使用した新しいグラフィックスステートの挿入方法を詳しく解説します。 + +空の PDF に半透明の矩形を描画し、数行のコードで結果を保存します。最後まで読むと、**ExtGState 辞書** がなぜ重要か、**グラフィックスステート** がストロークと塗りの不透明度をどのように制御するか、そして **Blend モード** が内部で何を行うかが理解できるようになります。 + +## 学べること + +- Aspose.Pdf を使って既存の PDF を読み込む方法 +- ページ上の **ExtGState** 辞書にアクセスし、変更する方法 +- `CA`、`ca`、`BM` エントリを定義する新しい **グラフィックスステート** の作成方法 +- 変更したドキュメントを保存し、任意の PDF ビューアで透明効果を確認できるようにする方法 +- よくある落とし穴(例:新しいステートをリソース辞書に追加し忘れる)とその簡単な対処法 + +> **前提条件:** Visual Studio 2022(またはお好みの IDE)、.NET 6 以降、そして Aspose.Pdf for .NET のライセンス(デモ用に無料トライアルで可)。 + +--- + +## 手順 1: PDF ドキュメントを読み込む + +まず最初に、編集したいファイルを開きます。`Aspose.Pdf.Document` クラスは、解析から書き込みまでをすべて処理します。 + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*なぜ重要か:* ドキュメントを読み込むことで、内部の COS(Concrete Object Structure)オブジェクトにアクセスできるようになります。ここに **グラフィックスステート** が格納されており、`Document` インスタンスが無ければ **ExtGState 辞書** にたどり着くことはできません。 + +--- + +## 手順 2: 最初のページとそのリソース辞書を取得する + +透明性はページレベルのリソーススコープで適用されるため、ページのリソースコレクションが必要です。 + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **ヒント:** 複数ページの PDF を扱う場合は `document.Pages` をループし、透明性を適用したい各ページで同じ手順を繰り返してください。 + +--- + +## 手順 3: ExtGState 辞書を取得(または作成)する + +**ExtGState** エントリはページのすべての拡張グラフィックスステートを保持します。まだ存在しない場合、Aspose が空の辞書を自動で作成します。 + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*解説:* +- `resourcesEditor["ExtGState"]` は既存の辞書を取得します。 +- `??` 演算子は常に辞書が存在することを保証し、`NullReferenceException` の発生を防ぎます。 + +--- + +## 手順 4: PDF の不透明度を持つ新しいグラフィックスステートを構築する + +ここで実際の透明パラメータを定義します。`CA` はストロークの不透明度、`ca` は塗りの不透明度、`BM` はブレンドモード(例: “Normal”, “Multiply” など)を設定します。 + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*なぜこれらのキーか?* +- `CA`(ストローク不透明度)と `ca`(塗り不透明度)は、PDF 仕様で透明性を表す数値エントリです。 +- `BM`(ブレンドモード)は、透明オブジェクトと背景をどのように合成するかをレンダラに指示します。最も一般的なのは “Normal” です。 + +--- + +## 手順 5: 新しいステートを ExtGState 辞書に登録する + +この例ではグラフィックスステートに名前(`GS0`)を付け、ページの **ExtGState** コレクションに追加します。 + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **プロのコツ:** 複数のステートを追加する場合は、`GS1`, `GS2` … のようにユニークな名前を付けましょう。同じ名前を再利用すると、既存のエントリが上書きされます。 + +--- + +## 手順 6: コンテンツにグラフィックスステートを適用する(任意だが推奨) + +透明効果をすぐに確認したい場合は、先ほど作成したステートを使って矩形を描画します。このステップは *PDF に透明性を追加* するために必須ではありませんが、ステートが正しく機能するかを検証するのに便利です。 + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*解説:* +- `SetExtGState("GS0")` は、コンテンツストリームに対して定義したグラフィックスステートの使用を指示します。 +- 矩形は 50 % の塗り不透明度で描画され、**PDF の不透明度** 設定が有効であることが確認できます。 + +--- + +## 手順 7: 変更した PDF を保存する + +最後に、変更内容をディスクに書き出します。 + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +`output.pdf` を Adobe Acrobat、Foxit、またはブラウザで開くと、ページコンテンツの上に半透明の矩形が表示されているはずです。 + +--- + +## 完全動作サンプル + +以下に、コピー&ペーストだけで動作する完全なプログラムを示します。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### 期待される出力 + +- `output.pdf` には元のページに加えて、50 % 透明な赤い矩形が描画されています。 +- **ExtGState** エントリ `GS0` がページのリソース辞書に追加され、再利用可能な状態になっています。 + +--- + +## よくある質問とエッジケース + +| 質問 | 回答 | +|----------|--------| +| **ライセンスは必要ですか?** | 開発・テスト目的であればトライアルライセンスで動作します。製品版で使用する場合は有料ライセンスが必要です。ライセンスが無いと出力に透かしが入ります。 | +| **PDF にすでに ExtGState エントリがある場合は?** | コードは既存の辞書をチェックして再利用するため、以前に定義されたステートが失われることはありません。 | +| **別のブレンドモードを設定できますか?** | もちろん可能です。`"Normal"` を `"Multiply"`、`"Screen"` など、PDF で定義された任意のブレンドモードに置き換えてください。 | +| **`CA` は必須ですか?** | 必須ではありません。`CA` を省略するとストローク不透明度はデフォルトで 1(完全不透明)になります。塗りの透明度だけを設定したい場合は `ca` のみでも構いません。 | +| **テキストにステートを適用するには?** | `canvas.SetExtGState("GS0")` を `canvas.ShowText(...)` の直前に呼び出します。同じグラフィックスステートはテキスト、パス、画像すべてに適用できます。 | + +--- + +## 次のステップ + +Now + + +## 次に学ぶべきことは? + +以下のチュートリアルは、本ガイドで示した手法に基づく関連トピックを扱っています。各リソースには、ステップバイステップの解説と完全なコード例が含まれており、API の追加機能を習得したり、独自プロジェクトで代替実装を検討したりする際に役立ちます。 + +- [Add Image Stamps to PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [How to Add Page Stamps in PDFs Using Aspose.PDF for .NET: A Complete Guide](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/advanced-features/_index.md b/pdf/korean/net/advanced-features/_index.md index 58e374a7b4..77a5fc72c5 100644 --- a/pdf/korean/net/advanced-features/_index.md +++ b/pdf/korean/net/advanced-features/_index.md @@ -50,7 +50,7 @@ Aspose.PDF for .NET을 사용하여 접근성이 뛰어나고 구조가 잘 잡 ### [Aspose.PDF for .NET을 사용하여 다중 레이어 PDF를 만드는 방법: 포괄적인 가이드](./create-multi-layer-pdfs-aspose-pdf-dotnet/) 이 단계별 가이드를 통해 Aspose.PDF for .NET을 사용하여 동적이고 대화형 다중 레이어 PDF 문서를 만드는 방법을 알아보세요. -### [Aspose.PDF for .NET을 사용하여 태그가 지정된 PDF를 만드는 방법: 고급 가이드](./creating-tagged-pdfs-aspose-pdf-dotnet/) +### [Aspose.PDF for .NET을 사용하여 태그가 지정된 PDF 만들기: 고급 가이드](./creating-tagged-pdfs-aspose-pdf-dotnet/) Aspose.PDF for .NET을 사용하여 접근성 높은 태그가 있는 PDF 문서를 만드는 방법을 알아보세요. 이 포괄적인 가이드를 통해 문서의 구조와 접근성을 향상시키세요. ### [Aspose.PDF for .NET을 사용하여 PDF/UA 표준에 따라 PDF를 검증하는 방법: 포괄적인 가이드](./validate-pdf-ua-standard-aspose-dotnet/) @@ -65,6 +65,9 @@ Aspose.PDF for .NET을 사용하여 접근성이 뛰어나고 스타일이 적 ### [C#에서 PDF 비교 방법 – PDF 차이 생성 완전 가이드](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Aspose.PDF for .NET을 사용하여 PDF를 비교하고 차이를 생성하는 방법을 단계별로 안내합니다. +### [Aspose.Pdf를 사용하여 PDF에 투명도 추가 – 완전 .NET 가이드](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Aspose.Pdf를 사용해 PDF에 투명 효과를 적용하고, .NET 환경에서 완전한 구현 방법을 단계별로 안내합니다. + ## 추가 자료 - [Net 문서용 Aspose.PDF](https://docs.aspose.com/pdf/net/) diff --git a/pdf/korean/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/korean/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..139b5cd278 --- /dev/null +++ b/pdf/korean/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-07-29 +description: Aspose.Pdf for .NET을 사용하여 PDF에 투명성을 추가하세요. 단계별 튜토리얼에서 PDF 불투명도, 블렌드 모드 + 및 그래픽 상태 설정 방법을 배워보세요. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: ko +lastmod: 2026-07-29 +og_description: PDF에 투명성을 빠르게 추가하세요. 이 가이드는 Aspose.Pdf for .NET을 사용하여 PDF 불투명도와 블렌드 + 모드를 설정하는 방법을 보여줍니다. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Aspose.Pdf로 PDF에 투명도 추가 – 전체 .NET 워크스루 +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Aspose.Pdf로 PDF에 투명도 추가 – 완전 .NET 가이드 +url: /ko/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Pdf를 사용하여 PDF에 투명도 추가 – 완전한 .NET 가이드 + +PDF 파일에 **투명도 추가**가 필요했지만 어떤 API 속성을 조정해야 할지 몰랐던 적이 있나요? 당신만 그런 것이 아닙니다. 이 튜토리얼에서는 PDF 불투명도 설정, 블렌드 모드 정의, 그리고 **Aspose.Pdf for .NET**을 사용하여 새로운 그래픽 상태를 삽입하는 방법을 정확히 보여주는 실용적인 엔드‑투‑엔드 예제를 단계별로 안내합니다. + +우리는 빈 PDF에서 시작해 반투명 사각형을 추가하고 결과를 저장합니다—몇 줄의 코드만으로 가능합니다. 끝까지 읽으면 **ExtGState dictionary**가 왜 중요한지, **graphics state**가 선과 채우기 불투명도를 어떻게 제어하는지, 그리고 **Blend mode**가 내부에서 무엇을 하는지 이해하게 될 것입니다. + +## 배울 내용 + +- Aspose.Pdf를 사용하여 기존 PDF를 로드하는 방법. +- 페이지의 **ExtGState** 사전을 액세스하고 수정하는 방법. +- `CA`, `ca`, `BM` 항목을 정의하는 새로운 **graphics state**를 만드는 방법. +- 투명도 효과가 모든 PDF 뷰어에서 보이도록 변경된 문서를 저장하는 방법. +- 일반적인 함정(예: 새로운 상태를 리소스 사전에 추가하는 것을 잊는 경우)과 빠른 해결 방법. + +> **전제 조건:** Visual Studio 2022(또는 원하는 IDE), .NET 6 이상, 그리고 Aspose.Pdf for .NET 라이선스(무료 체험판으로도 이 데모를 실행할 수 있습니다). + +--- + +## 단계 1: PDF 문서 로드 + +먼저, 편집하려는 파일을 엽니다. `Aspose.Pdf.Document` 클래스는 파싱부터 쓰기까지 모든 작업을 처리합니다. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*왜 중요한가:* 문서를 로드하면 내부 COS(Concrete Object Structure) 객체에 접근할 수 있으며, 여기서 **graphics state**가 존재합니다. 유효한 `Document` 인스턴스가 없으면 **ExtGState dictionary**에 접근할 수 없습니다. + +--- + +## 단계 2: 첫 번째 페이지와 해당 리소스 사전 가져오기 + +투명도는 페이지 수준 리소스 범위에 적용되므로 페이지의 리소스 컬렉션이 필요합니다. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **팁:** 다중 페이지 PDF를 다루는 경우 `document.Pages`를 순회하면서 영향을 주고 싶은 각 페이지에 대해 단계를 반복하면 됩니다. + +--- + +## 단계 3: ExtGState 사전 찾기(또는 생성하기) + +**ExtGState** 항목은 페이지의 모든 확장 그래픽 상태를 저장합니다. 아직 존재하지 않으면 Aspose가 빈 사전을 생성합니다. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*설명:* +- `resourcesEditor["ExtGState"]`는 기존 사전을 가져옵니다. +- null 병합 연산자(`??`)는 항상 작업할 사전이 존재하도록 보장하여 `NullReferenceException`을 방지합니다. + +--- + +## 단계 4: PDF 불투명도로 새로운 Graphics State 구축 + +이제 실제 투명도 매개변수를 정의합니다. `CA`는 스트로크 불투명도를, `ca`는 채우기 불투명도를 제어하고, `BM`은 블렌드 모드(예: “Normal”, “Multiply” 등)를 설정합니다. + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*왜 이러한 키인가?* +- `CA`(`Stroke opacity`)와 `ca`(`Fill opacity`)는 PDF 사양에서 투명도를 표현하기 위해 사용하는 두 개의 숫자 항목입니다. +- `BM`(`Blend mode`)은 렌더러에게 투명 객체를 배경과 어떻게 결합할지 알려줍니다; “Normal”이 가장 일반적인 선택입니다. + +--- + +## 단계 5: ExtGState 사전에 새로운 상태 등록 + +우리의 graphics state에 이름(`GS0` 예시)을 부여하고 페이지의 **ExtGState** 컬렉션에 삽입합니다. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **프로 팁:** 여러 상태를 추가할 계획이라면 고유한 이름(`GS1`, `GS2`, …)을 선택하세요. 이름을 재사용하면 이전 항목이 덮어쓰여집니다. + +--- + +## 단계 6: 콘텐츠에 Graphics State 적용(선택 사항이지만 권장됨) + +투명도 효과를 즉시 확인하고 싶다면 새로 만든 상태를 사용해 사각형을 그릴 수 있습니다. 이 단계는 *PDF에 투명도 추가*에 반드시 필요한 것은 아니며—상태가 이제 모든 향후 콘텐츠 스트림에서 사용할 수 있게 되지만—전체가 정상 작동하는지 확인하는 데 도움이 됩니다. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*설명:* +- `SetExtGState("GS0")`는 콘텐츠 스트림에 우리가 정의한 graphics state를 사용하도록 지시합니다. +- 사각형은 50 % 채우기 불투명도로 표시되어 **PDF opacity** 설정이 활성화되었음을 확인합니다. + +--- + +## 단계 7: 수정된 PDF 저장 + +마지막으로 변경 사항을 디스크에 기록합니다. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +`output.pdf`를 Adobe Acrobat, Foxit 또는 브라우저에서 열면 페이지 내용 위에 반투명 사각형이 겹쳐진 것을 볼 수 있습니다. + +--- + +## 전체 작업 예제 + +모두 합치면, 복사‑붙여넣기 바로 사용할 수 있는 전체 프로그램은 다음과 같습니다: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### 예상 출력 + +- `output.pdf`에는 원본 페이지에 **추가**로 50 % 투명한 빨간 사각형이 포함됩니다. +- **ExtGState** 항목 `GS0`이 이제 페이지의 리소스 사전의 일부가 되어 재사용할 수 있습니다. + +--- + +## 일반 질문 및 엣지 케이스 + +| Question | Answer | +|----------|--------| +| **이 코드를 실행하려면 라이선스가 필요합니까?** | 체험판 라이선스로 개발 및 테스트가 가능합니다. 프로덕션에서는 유료 라이선스가 필요하며, 그렇지 않으면 출력에 워터마크가 삽입됩니다. | +| **PDF에 이미 ExtGState 항목이 있는 경우는 어떻게 되나요?** | 코드는 기존 사전을 확인하고 재사용하므로 이전에 정의된 상태가 손실되지 않습니다. | +| **다른 블렌드 모드를 설정할 수 있나요?** | 물론 가능합니다. `"Normal"`을 `"Multiply"`, `"Screen"` 또는 PDF에서 정의된 다른 블렌드 모드로 교체하면 됩니다. | +| **`CA`가 필수인가요?** | 아니요. `CA`를 생략하면 스트로크 불투명도가 기본값 1(완전 불투명)으로 설정됩니다. 채우기 투명도만 원한다면 `ca`만 설정할 수도 있습니다. | +| **텍스트에 상태를 적용하려면 어떻게 해야 하나요?** | `canvas.ShowText(...)`를 호출하기 전에 `canvas.SetExtGState("GS0")`를 사용합니다. 동일한 graphics state는 텍스트, 경로 및 이미지에 모두 적용됩니다. | + +## 다음 단계 + +이제 + +## 다음에 배워야 할 내용은? + +다음 튜토리얼은 이 가이드에서 시연한 기술을 기반으로 하는 밀접한 관련 주제를 다룹니다. 각 자료에는 전체 작업 코드 예제와 단계별 설명이 포함되어 있어 추가 API 기능을 마스터하고 프로젝트에서 대체 구현 방식을 탐색하는 데 도움이 됩니다. + +- [Aspose.PDF for .NET을 사용하여 PDF에 이미지 스탬프 추가: 단계별 가이드](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Aspose.PDF .NET을 사용하여 PDF에 텍스트 스탬프 추가 방법: 종합 가이드](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [Aspose.PDF for .NET을 사용하여 PDF에 페이지 스탬프 추가: 완전 가이드](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/polish/net/advanced-features/_index.md b/pdf/polish/net/advanced-features/_index.md index 47d2fcc769..76756ade69 100644 --- a/pdf/polish/net/advanced-features/_index.md +++ b/pdf/polish/net/advanced-features/_index.md @@ -35,7 +35,7 @@ Naucz się tworzyć ustrukturyzowane, tagowane pliki PDF za pomocą Aspose.PDF d ### [Tworzenie dostępnych, oznaczonych plików PDF przy użyciu Aspose.PDF dla .NET: Ulepszanie tytułów, tekstu alternatywnego i układu](./enhanced-tagged-pdfs-aspose-pdf-dot-net/) Dowiedz się, jak tworzyć dostępne, oznaczone pliki PDF za pomocą Aspose.PDF dla .NET. Ustaw tytuły, tekst alternatywny i atrybuty układu, takie jak BBox, za pomocą C#. Popraw dostępność dokumentu. -### [Tworzenie dostępnych, oznaczonych plików PDF za pomocą Aspose.PDF dla .NET: przewodnik krok po kroku](./create-tagged-pdfs-aspose-pdf-dotnet/) +### [Tworzenie dostępnych, oznaczonych plików PDF przy użyciu Aspose.PDF dla .NET: przewodnik krok po kroku](./create-tagged-pdfs-aspose-pdf-dotnet/) Dowiedz się, jak tworzyć dostępne, oznaczone dokumenty PDF przy użyciu Aspose.PDF dla .NET. Ten przewodnik obejmuje konfigurację, dodawanie ilustracji i zapisywanie dokumentu. ### [Tworzenie wielojęzycznych oznaczonych plików PDF za pomocą Aspose.PDF dla .NET: kompleksowy przewodnik](./create-multilingual-tagged-pdfs-aspose-pdf-net/) @@ -50,7 +50,7 @@ Dowiedz się, jak tworzyć dostępne, oznaczone dokumenty PDF przy użyciu Aspos ### [Jak tworzyć wielowarstwowe pliki PDF przy użyciu Aspose.PDF dla .NET: kompleksowy przewodnik](./create-multi-layer-pdfs-aspose-pdf-dotnet/) Dowiedz się, jak tworzyć dynamiczne i interaktywne, wielowarstwowe dokumenty PDF za pomocą Aspose.PDF dla platformy .NET, korzystając z tego przewodnika krok po kroku. -### [Jak tworzyć oznaczone pliki PDF za pomocą Aspose.PDF dla .NET: przewodnik zaawansowany](./creating-tagged-pdfs-aspose-pdf-dotnet/) +### [Jak tworzyć oznaczone pliki PDF przy użyciu Aspose.PDF dla .NET: przewodnik zaawansowany](./creating-tagged-pdfs-aspose-pdf-dotnet/) Dowiedz się, jak tworzyć dostępne, oznaczone dokumenty PDF przy użyciu Aspose.PDF dla platformy .NET. Ulepsz strukturę dokumentu i dostępność dzięki temu kompleksowemu przewodnikowi. ### [Jak walidować pliki PDF pod kątem standardu PDF/UA przy użyciu Aspose.PDF dla .NET: kompleksowy przewodnik](./validate-pdf-ua-standard-aspose-dotnet/) @@ -65,6 +65,9 @@ Naucz się tworzyć dostępne, stylizowane i oznaczone dokumenty PDF przy użyci ### [Jak porównywać pliki PDF w C# – Kompletny przewodnik po generowaniu różnic PDF](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Dowiedz się, jak porównać dwa pliki PDF i wygenerować ich różnice przy użyciu Aspose.PDF dla .NET w C#. +### [Dodaj przezroczystość do PDF przy użyciu Aspose.Pdf – Kompletny przewodnik .NET](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Dowiedz się, jak dodać przezroczystość do dokumentów PDF przy użyciu Aspose.Pdf w .NET, z przykładami kodu C#. + ## Dodatkowe zasoby - [Aspose.PDF dla dokumentacji sieciowej](https://docs.aspose.com/pdf/net/) diff --git a/pdf/polish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/polish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..1e3957fed7 --- /dev/null +++ b/pdf/polish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-07-29 +description: Dodaj przezroczystość do PDF przy użyciu Aspose.Pdf dla .NET. Dowiedz + się, jak ustawić przezroczystość PDF, tryb mieszania i stan graficzny w samouczku + krok po kroku. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: pl +lastmod: 2026-07-29 +og_description: Szybko dodaj przezroczystość do PDF. Ten przewodnik pokazuje, jak + ustawić przezroczystość i tryb mieszania PDF przy użyciu Aspose.Pdf dla .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Dodaj przezroczystość do PDF za pomocą Aspose.Pdf – Pełny przewodnik .NET +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Dodaj przezroczystość do PDF przy użyciu Aspose.Pdf – Kompletny przewodnik + .NET +url: /pl/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Dodaj przezroczystość do PDF przy użyciu Aspose.Pdf – Kompletny przewodnik .NET + +Czy kiedykolwiek potrzebowałeś **dodać przezroczystość do PDF** i nie byłeś pewien, które właściwości API należy zmienić? Nie jesteś sam. W tym samouczku przeprowadzimy praktyczny, kompleksowy przykład, który dokładnie pokazuje, jak ustawić przezroczystość PDF, zdefiniować tryb mieszania i wstrzyknąć nowy stan graficzny przy użyciu **Aspose.Pdf for .NET**. + +Zaczniemy od pustego PDF, dodamy półprzezroczysty prostokąt i zapisujemy wynik — wszystko w zaledwie kilku linijkach. Po zakończeniu zrozumiesz, dlaczego **słownik ExtGState** ma znaczenie, jak **stan graficzny** kontroluje zarówno przezroczystość obrysu, jak i wypełnienia oraz co robi **tryb Blend** w tle. + +## Czego się nauczysz + +- Jak załadować istniejący PDF przy użyciu Aspose.Pdf. +- Jak uzyskać dostęp i zmodyfikować słownik **ExtGState** na stronie. +- Jak utworzyć nowy **stan graficzny**, który definiuje wpisy `CA`, `ca` i `BM`. +- Jak zapisać zmodyfikowany dokument, aby efekt przezroczystości był widoczny w dowolnym przeglądarce PDF. +- Typowe pułapki (np. zapomnienie o dodaniu nowego stanu do słownika zasobów) oraz szybkie rozwiązania. + +> **Wymagania wstępne:** Visual Studio 2022 (lub dowolne IDE), .NET 6 lub nowszy oraz licencja Aspose.Pdf for .NET (bezpłatna wersja próbna wystarczy do tego demo). + +--- + +## Krok 1: Załaduj dokument PDF + +Na początek—otwórz plik, który chcesz edytować. Klasa `Aspose.Pdf.Document` obsługuje wszystko, od parsowania po zapisywanie. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Dlaczego to ważne:* Ładowanie dokumentu daje dostęp do wewnętrznych obiektów COS (Concrete Object Structure), w których znajduje się **stan graficzny**. Bez prawidłowej instancji `Document` nie możesz uzyskać dostępu do **słownika ExtGState**. + +--- + +## Krok 2: Pobierz pierwszą stronę i jej słownik zasobów + +Przezroczystość jest stosowana na poziomie zasobów strony, więc potrzebujemy kolekcji zasobów tej strony. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Wskazówka:** Jeśli pracujesz z wielostronicowymi PDF‑ami, po prostu iteruj po `document.Pages` i powtórz kroki dla każdej strony, którą chcesz zmodyfikować. + +--- + +## Krok 3: Znajdź (lub utwórz) słownik ExtGState + +Wpis **ExtGState** przechowuje wszystkie rozszerzone stany graficzne dla strony. Jeśli jeszcze nie istnieje, Aspose utworzy dla nas pusty. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Wyjaśnienie:* +- `resourcesEditor["ExtGState"]` pobiera istniejący słownik. +- Operator łączenia z null (`??`) zapewnia, że zawsze mamy słownik do pracy, zapobiegając `NullReferenceException`. + +--- + +## Krok 4: Zbuduj nowy stan graficzny z przezroczystością PDF + +Teraz definiujemy rzeczywiste parametry przezroczystości. `CA` kontroluje przezroczystość obrysu, `ca` kontroluje przezroczystość wypełnienia, a `BM` ustawia tryb mieszania (np. „Normal”, „Multiply” itp.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Dlaczego te klucze?* +- `CA` (`Stroke opacity`) i `ca` (`Fill opacity`) to dwa numeryczne wpisy, które specyfikacja PDF używa do wyrażania przezroczystości. +- `BM` (`Blend mode`) informuje renderer, jak połączyć przezroczysty obiekt z tłem; „Normal” jest najczęściej wybieranym trybem. + +--- + +## Krok 5: Zarejestruj nowy stan w słowniku ExtGState + +Nadajemy naszemu stanowi graficznemu nazwę (`GS0` w tym przykładzie) i wkładamy go do kolekcji **ExtGState** strony. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Pro tip:** Wybierz unikalną nazwę (`GS1`, `GS2`, …), jeśli planujesz dodać wiele stanów. Ponowne użycie nazwy nadpisze poprzedni wpis. + +--- + +## Krok 6: Zastosuj stan graficzny do zawartości (Opcjonalnie, ale zalecane) + +Jeśli chcesz od razu zobaczyć efekt przezroczystości, możesz narysować prostokąt używając nowo utworzonego stanu. Ten krok nie jest ściśle wymagany do *dodania przezroczystości do PDF* — stan jest teraz dostępny dla dowolnych przyszłych strumieni zawartości, ale pomaga zweryfikować, że wszystko działa. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Wyjaśnienie:* +- `SetExtGState("GS0")` informuje strumień zawartości, aby używał zdefiniowanego stanu graficznego. +- Prostokąt pojawi się z 50 % przezroczystością wypełnienia, potwierdzając, że ustawienia **przezroczystości PDF** są aktywne. + +--- + +## Krok 7: Zapisz zmodyfikowany PDF + +Na koniec zapisz zmiany na dysk. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Otwórz `output.pdf` w Adobe Acrobat, Foxit lub nawet w przeglądarce — powinieneś zobaczyć półprzezroczysty prostokąt nakładający się na zawartość strony. + +--- + +## Pełny działający przykład + +Łącząc wszystko razem, oto kompletny program gotowy do skopiowania i wklejenia: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Oczekiwany wynik + +- `output.pdf` zawiera oryginalne strony **plus** czerwony prostokąt o 50 % przezroczystości. +- Wpis **ExtGState** `GS0` jest teraz częścią słownika zasobów strony, gotowy do ponownego użycia. + +--- + +## Częste pytania i przypadki brzegowe + +| Question | Answer | +|----------|--------| +| **Czy potrzebuję licencji, aby uruchomić to?** | Licencja próbna działa w środowisku deweloperskim i testowym. W produkcji potrzebna będzie płatna licencja, w przeciwnym razie wynik będzie zawierał znak wodny. | +| **Co jeśli PDF już posiada wpis ExtGState?** | Kod sprawdza, czy słownik już istnieje i ponownie go używa, więc nie utracisz wcześniej zdefiniowanych stanów. | +| **Czy mogę ustawić inny tryb mieszania?** | Oczywiście. Zastąp `"Normal"` przez `"Multiply"`, `"Screen"` lub dowolny tryb mieszania zdefiniowany w PDF. | +| **Czy `CA` jest obowiązkowe?** | Nie. Jeśli pominiesz `CA`, przezroczystość obrysu domyślnie wynosi 1 (w pełni nieprzezroczysta). Możesz także ustawić tylko `ca` dla przezroczystości wypełnienia. | +| **Jak zastosować stan do tekstu?** | Użyj `canvas.SetExtGState("GS0")` przed wywołaniem `canvas.ShowText(...)`. Ten sam stan graficzny działa dla tekstu, ścieżek i obrazów. | + +--- + +## Kolejne kroki + +Teraz + +## Co powinieneś nauczyć się dalej? + +Poniższe samouczki obejmują tematy ściśle powiązane, które rozwijają techniki przedstawione w tym przewodniku. Każde źródło zawiera kompletne działające przykłady kodu z wyjaśnieniami krok po kroku, aby pomóc Ci opanować dodatkowe funkcje API i odkrywać alternatywne podejścia implementacyjne w własnych projektach. + +- [Dodaj znaczniki obrazów do PDF przy użyciu Aspose.PDF for .NET: Przewodnik krok po kroku](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Jak dodać znacznik tekstowy do PDF przy użyciu Aspose.PDF .NET: Kompletny przewodnik](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [Jak dodać znaczniki stron w PDF przy użyciu Aspose.PDF for .NET: Kompletny przewodnik](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/portuguese/net/advanced-features/_index.md b/pdf/portuguese/net/advanced-features/_index.md index 70792fee25..c1ad11e29e 100644 --- a/pdf/portuguese/net/advanced-features/_index.md +++ b/pdf/portuguese/net/advanced-features/_index.md @@ -65,6 +65,9 @@ Aprenda a criar documentos PDF acessíveis, estilizados e marcados usando o Aspo ### [Como comparar PDFs em C# – Guia completo para gerar diferenças de PDF](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Aprenda a comparar documentos PDF em C# usando Aspose.PDF, gerando diferenças de forma precisa e automatizada. +### [Adicionar transparência a PDF com Aspose.Pdf – Guia completo .NET](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Aprenda a aplicar transparência a documentos PDF usando Aspose.Pdf para .NET, com exemplos de código passo a passo. + ## Recursos adicionais - [Aspose.PDF para documentação da Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/portuguese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/portuguese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..90827e2704 --- /dev/null +++ b/pdf/portuguese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-07-29 +description: Adicione transparência a PDFs usando Aspose.Pdf para .NET. Aprenda a + definir opacidade, modo de mesclagem e estado gráfico em um tutorial passo a passo. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: pt +lastmod: 2026-07-29 +og_description: Adicione transparência a PDFs rapidamente. Este guia mostra como definir + a opacidade e o modo de mesclagem de PDFs usando Aspose.Pdf para .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Adicionar Transparência a PDF com Aspose.Pdf – Guia Completo .NET +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Adicionar Transparência a PDF com Aspose.Pdf – Guia Completo .NET +url: /pt/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Adicionar Transparência a PDF com Aspose.Pdf – Guia Completo .NET + +Já precisou **adicionar transparência a PDFs** mas não tinha certeza de quais propriedades da API ajustar? Você não está sozinho. Neste tutorial, percorreremos um exemplo prático, de ponta a ponta, que mostra exatamente como definir a opacidade de PDF, definir um modo de mesclagem e inserir um novo estado gráfico usando **Aspose.Pdf for .NET**. + +Começaremos com um PDF em branco, adicionaremos um retângulo semitransparente e salvaremos o resultado — tudo em apenas algumas linhas. Ao final, você entenderá por que o **dicionário ExtGState** é importante, como o **estado gráfico** controla tanto a opacidade de traço quanto de preenchimento, e o que o **modo de mesclagem (Blend mode)** faz nos bastidores. + +## O que você aprenderá + +- Como carregar um PDF existente com Aspose.Pdf. +- Como acessar e modificar o dicionário **ExtGState** em uma página. +- Como criar um novo **estado gráfico** que define as entradas `CA`, `ca` e `BM`. +- Como salvar o documento alterado para que o efeito de transparência seja visível em qualquer visualizador de PDF. +- Armadilhas comuns (por exemplo, esquecer de adicionar o novo estado ao dicionário de recursos) e correções rápidas. + +> **Pré-requisitos:** Visual Studio 2022 (ou qualquer IDE de sua preferência), .NET 6 ou superior, e uma licença do Aspose.Pdf for .NET (a versão de avaliação gratuita funciona para esta demonstração). + +--- + +## Etapa 1: Carregar o Documento PDF + +Primeiro de tudo — abra o arquivo que você deseja editar. A classe `Aspose.Pdf.Document` cuida de tudo, desde a análise até a gravação. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Por que isso importa:* Carregar o documento lhe dá acesso aos objetos internos COS (Concrete Object Structure), que é onde o **estado gráfico** reside. Sem uma instância válida de `Document`, você não pode acessar o **dicionário ExtGState**. + +--- + +## Etapa 2: Obter a Primeira Página e Seu Dicionário de Recursos + +A transparência é aplicada no escopo de recursos da página, portanto precisamos da coleção de recursos da página. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Dica:** Se você estiver trabalhando com PDFs de várias páginas, basta percorrer `document.Pages` e repetir as etapas para cada página que deseja afetar. + +--- + +## Etapa 3: Localizar (ou Criar) o Dicionário ExtGState + +A entrada **ExtGState** armazena todos os estados gráficos estendidos da página. Se ainda não existir, o Aspose criará um vazio para nós. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Explicação:* +- `resourcesEditor["ExtGState"]` obtém o dicionário existente. +- O operador de coalescência nula (`??`) garante que sempre tenhamos um dicionário para trabalhar, evitando um `NullReferenceException`. + +--- + +## Etapa 4: Construir um Novo Estado Gráfico com Opacidade de PDF + +Agora definimos os parâmetros reais de transparência. `CA` controla a opacidade do traço, `ca` controla a opacidade do preenchimento, e `BM` define o modo de mesclagem (por exemplo, “Normal”, “Multiply”, etc.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Por que essas chaves?* +- `CA` (`Stroke opacity`) e `ca` (`Fill opacity`) são as duas entradas numéricas que a especificação PDF usa para expressar transparência. +- `BM` (`Blend mode`) indica ao renderizador como combinar o objeto transparente com o plano de fundo; “Normal” é a escolha mais comum. + +--- + +## Etapa 5: Registrar o Novo Estado no Dicionário ExtGState + +Damos ao nosso estado gráfico um nome (`GS0` neste exemplo) e o inserimos na coleção **ExtGState** da página. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Dica profissional:** Escolha um nome único (`GS1`, `GS2`, …) se você pretende adicionar múltiplos estados. Reutilizar um nome sobrescreverá a entrada anterior. + +--- + +## Etapa 6: Aplicar o Estado Gráfico ao Conteúdo (Opcional, mas Recomendado) + +Se você quiser ver o efeito de transparência imediatamente, pode desenhar um retângulo usando o estado recém‑criado. Esta etapa não é estritamente necessária para *adicionar transparência a PDF* — o estado agora está disponível para quaisquer fluxos de conteúdo futuros — mas ajuda a verificar se tudo funciona. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Explicação:* +- `SetExtGState("GS0")` indica ao fluxo de conteúdo para usar o estado gráfico que definimos. +- O retângulo aparecerá com 50 % de opacidade de preenchimento, confirmando que as configurações de **opacidade PDF** estão ativas. + +--- + +## Etapa 7: Salvar o PDF Modificado + +Finalmente, grave as alterações de volta ao disco. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Abra `output.pdf` no Adobe Acrobat, Foxit ou até mesmo no seu navegador — você deverá ver o retângulo semitransparente sobrepondo o conteúdo da página. + +--- + +## Exemplo Completo em Funcionamento + +Juntando tudo, aqui está o programa completo, pronto para copiar e colar: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Saída Esperada + +- `output.pdf` contém as páginas originais **mais** um retângulo vermelho que é 50 % transparente. +- A entrada **ExtGState** `GS0` agora faz parte do dicionário de recursos da página, pronta para reutilização. + +--- + +## Perguntas Frequentes & Casos Limítrofes + +| Pergunta | Resposta | +|----------|----------| +| **Preciso de uma licença para executar isso?** | Uma licença de avaliação funciona para desenvolvimento e testes. Para produção você precisará de uma licença paga, caso contrário a saída conterá uma marca d'água. | +| **E se o PDF já possuir uma entrada ExtGState?** | O código verifica se já existe um dicionário e o reutiliza, portanto você não perderá nenhum estado definido anteriormente. | +| **Posso definir um modo de mesclagem diferente?** | Absolutamente. Substitua `"Normal"` por `"Multiply"`, `"Screen"` ou qualquer modo de mesclagem definido pelo PDF. | +| **`CA` é obrigatório?** | Não. Se você omitir `CA`, a opacidade do traço padrão será 1 (totalmente opaco). Você também pode definir apenas `ca` para transparência de preenchimento. | +| **Como aplico o estado ao texto?** | Use `canvas.SetExtGState("GS0")` antes de chamar `canvas.ShowText(...)`. O mesmo estado gráfico funciona para texto, caminhos e imagens. | + +--- + +## Próximos Passos + +Agora + +## O que você deve aprender a seguir? + +Os tutoriais a seguir abordam tópicos intimamente relacionados que se baseiam nas técnicas demonstradas neste guia. Cada recurso inclui exemplos de código completos e funcionais com explicações passo a passo para ajudá‑lo a dominar recursos adicionais da API e explorar abordagens alternativas de implementação em seus próprios projetos. + +- [Adicionar Selos de Imagem a PDFs usando Aspose.PDF para .NET: Um Guia Passo a Passo](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Como Adicionar um Selo de Texto a PDF usando Aspose.PDF .NET: Guia Abrangente](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [Como Adicionar Selos de Página em PDFs usando Aspose.PDF para .NET: Um Guia Completo](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/advanced-features/_index.md b/pdf/russian/net/advanced-features/_index.md index 3a7ddadcf0..d2e3a7902c 100644 --- a/pdf/russian/net/advanced-features/_index.md +++ b/pdf/russian/net/advanced-features/_index.md @@ -65,6 +65,9 @@ ### [Как сравнивать PDF в C# — Полное руководство по генерации различий PDF](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Узнайте, как сравнивать PDF-файлы в C# и генерировать отчет о различиях с помощью Aspose.PDF. +### [Добавление прозрачности в PDF с Aspose.Pdf – Полное руководство для .NET](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Узнайте, как добавить прозрачность в PDF-документы с помощью Aspose.Pdf для .NET, используя полное руководство с примерами кода. + ## Дополнительные ресурсы - [Документация Aspose.PDF для сети](https://docs.aspose.com/pdf/net/) diff --git a/pdf/russian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/russian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..856c449bbb --- /dev/null +++ b/pdf/russian/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-07-29 +description: Добавьте прозрачность в PDF с помощью Aspose.Pdf для .NET. Узнайте, как + установить непрозрачность PDF, режим наложения и графическое состояние в пошаговом + руководстве. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: ru +lastmod: 2026-07-29 +og_description: Быстро добавьте прозрачность в PDF. В этом руководстве показано, как + задать непрозрачность и режим наложения PDF с помощью Aspose.Pdf для .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Добавьте прозрачность в PDF с помощью Aspose.Pdf – Полное руководство по + .NET +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Добавьте прозрачность в PDF с помощью Aspose.Pdf – полное руководство по .NET +url: /ru/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Добавление прозрачности в PDF с помощью Aspose.Pdf – Полное руководство для .NET + +Когда‑то вам нужно было **добавить прозрачность в PDF**‑файлы, но вы не знали, какие свойства API менять? Вы не одиноки. В этом руководстве мы пройдём практический пример от начала до конца, показывающий, как установить непрозрачность PDF, задать режим наложения и внедрить новое графическое состояние с помощью **Aspose.Pdf for .NET**. + +Мы начнём с пустого PDF, добавим полупрозрачный прямоугольник и сохраним результат — всё это в паре строк кода. К концу вы поймёте, почему важен словарь **ExtGState**, как **графическое состояние** управляет как обводкой, так и заливкой, и что делает **Blend mode** «под капотом». + +## Что вы узнаете + +- Как загрузить существующий PDF с помощью Aspose.Pdf. +- Как получить доступ к словарю **ExtGState** на странице и изменить его. +- Как создать новое **графическое состояние**, определяющее записи `CA`, `ca` и `BM`. +- Как сохранить изменённый документ, чтобы эффект прозрачности был виден в любом PDF‑просмотрщике. +- Распространённые подводные камни (например, забыть добавить новое состояние в словарь ресурсов) и быстрые решения. + +> **Требования:** Visual Studio 2022 (или любая другая IDE), .NET 6 или новее и лицензия Aspose.Pdf for .NET (для демонстрации подойдёт бесплатная trial‑версия). + +--- + +## Шаг 1: Загрузка PDF‑документа + +Первым делом откройте файл, который хотите отредактировать. Класс `Aspose.Pdf.Document` отвечает за всё: от парсинга до записи. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Почему это важно:* Загрузка документа даёт доступ к внутренним объектам COS (Concrete Object Structure), где хранится **графическое состояние**. Без корректного экземпляра `Document` вы не сможете обратиться к словарю **ExtGState**. + +--- + +## Шаг 2: Получение первой страницы и её словаря ресурсов + +Прозрачность применяется на уровне ресурсов страницы, поэтому нам нужен набор ресурсов страницы. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Подсказка:** Если работаете с многостраничными PDF, просто пройдитесь в цикле по `document.Pages` и повторите шаги для каждой нужной страницы. + +--- + +## Шаг 3: Поиск (или создание) словаря ExtGState + +Запись **ExtGState** хранит все расширенные графические состояния страницы. Если её ещё нет, Aspose создаст пустой словарь. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Объяснение:* +- `resourcesEditor["ExtGState"]` получает существующий словарь. +- Оператор объединения с `null` (`??`) гарантирует, что у нас всегда будет словарь, предотвращая `NullReferenceException`. + +--- + +## Шаг 4: Создание нового графического состояния с непрозрачностью PDF + +Теперь задаём реальные параметры прозрачности. `CA` управляет непрозрачностью обводки, `ca` — непрозрачностью заливки, а `BM` задаёт режим наложения (например, «Normal», «Multiply» и т.д.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Зачем нужны эти ключи?* +- `CA` (`Stroke opacity`) и `ca` (`Fill opacity`) — два числовых параметра, которые спецификация PDF использует для описания прозрачности. +- `BM` (`Blend mode`) указывает рендереру, как комбинировать прозрачный объект с фоном; «Normal» — самый распространённый выбор. + +--- + +## Шаг 5: Регистрация нового состояния в словаре ExtGState + +Присваиваем нашему графическому состоянию имя (`GS0` в этом примере) и помещаем его в коллекцию **ExtGState** страницы. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Профессиональный совет:** Выбирайте уникальное имя (`GS1`, `GS2`, …), если планируете добавить несколько состояний. Повторное использование имени перезапишет предыдущее значение. + +--- + +## Шаг 6: Применение графического состояния к контенту (необязательно, но рекомендуется) + +Если хотите сразу увидеть эффект прозрачности, нарисуйте прямоугольник, используя только что созданное состояние. Этот шаг не обязателен для *добавления прозрачности в PDF* — состояние уже доступно для любых будущих потоков контента, но он помогает убедиться, что всё работает. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Объяснение:* +- `SetExtGState("GS0")` указывает потоку контента использовать определённое графическое состояние. +- Прямоугольник появится с 50 % непрозрачностью заливки, подтверждая, что настройки **PDF opacity** активированы. + +--- + +## Шаг 7: Сохранение изменённого PDF + +Наконец, запишите изменения на диск. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Откройте `output.pdf` в Adobe Acrobat, Foxit или даже в браузере — вы увидите полупрозрачный прямоугольник, наложенный на содержимое страницы. + +--- + +## Полный рабочий пример + +Собираем всё вместе, получаем готовую программу, готовую к копированию и вставке: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Ожидаемый результат + +- `output.pdf` содержит оригинальные страницы **плюс** красный прямоугольник с 50 % прозрачностью. +- Запись **ExtGState** `GS0` теперь находится в словаре ресурсов страницы и готова к повторному использованию. + +--- + +## Часто задаваемые вопросы и особые случаи + +| Вопрос | Ответ | +|--------|-------| +| **Нужна ли лицензия для запуска?** | Пробная лицензия подходит для разработки и тестирования. Для продакшна требуется платная лицензия, иначе в результате будет водяной знак. | +| **Что если в PDF уже есть запись ExtGState?** | Код проверяет наличие словаря и переиспользует его, так что ранее определённые состояния не потеряются. | +| **Можно ли задать другой режим наложения?** | Конечно. Замените `"Normal"` на `"Multiply"`, `"Screen"` или любой другой режим, определённый в PDF. | +| **Обязательно ли указывать `CA`?** | Нет. Если пропустить `CA`, непрозрачность обводки по умолчанию будет 1 (полностью непрозрачна). Можно задать только `ca` для прозрачности заливки. | +| **Как применить состояние к тексту?** | Вызовите `canvas.SetExtGState("GS0")` перед `canvas.ShowText(...)`. То же графическое состояние работает для текста, путей и изображений. | + +--- + +## Следующие шаги + +Now + + +## Что изучать дальше? + + +Ниже представлены руководства, тесно связанные с темами, раскрытыми в этом руководстве. Каждый ресурс содержит полностью рабочие примеры кода с пошаговыми объяснениями, помогающие освоить дополнительные возможности API и исследовать альтернативные подходы в ваших проектах. + +- [Add Image Stamps to PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [How to Add Page Stamps in PDFs Using Aspose.PDF for .NET: A Complete Guide](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/advanced-features/_index.md b/pdf/spanish/net/advanced-features/_index.md index 1598370bd2..37f30e87e0 100644 --- a/pdf/spanish/net/advanced-features/_index.md +++ b/pdf/spanish/net/advanced-features/_index.md @@ -65,6 +65,9 @@ Aprenda a crear documentos PDF accesibles, con estilo y etiquetas usando Aspose. ### [Cómo comparar PDFs en C# – Guía completa para generar diferencias de PDF](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Aprenda a comparar documentos PDF en C# y generar diffs de PDF de forma eficiente con Aspose.PDF. +### [Añadir transparencia a PDF con Aspose.Pdf – Guía completa .NET](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Aprenda a aplicar transparencias a sus documentos PDF usando Aspose.Pdf para .NET, con ejemplos de código C# paso a paso. + ## Recursos adicionales - [Documentación de Aspose.PDF para la red](https://docs.aspose.com/pdf/net/) diff --git a/pdf/spanish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/spanish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..e1ce669d13 --- /dev/null +++ b/pdf/spanish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-07-29 +description: Añade transparencia a PDF usando Aspose.Pdf para .NET. Aprende a establecer + la opacidad del PDF, el modo de fusión y el estado gráfico en un tutorial paso a + paso. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: es +lastmod: 2026-07-29 +og_description: Añade transparencia a PDF rápidamente. Esta guía muestra cómo establecer + la opacidad y el modo de fusión del PDF usando Aspose.Pdf para .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Agregar transparencia a PDF con Aspose.Pdf – Guía completa de .NET +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Agregar transparencia a PDF con Aspose.Pdf – Guía completa de .NET +url: /es/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Agregar Transparencia a PDF con Aspose.Pdf – Guía Completa .NET + +¿Alguna vez necesitaste **agregar transparencia a PDF** pero no estabas seguro de qué propiedades de la API ajustar? No estás solo. En este tutorial recorreremos un ejemplo práctico, de extremo a extremo, que muestra exactamente cómo establecer la opacidad del PDF, definir un modo de fusión e insertar un nuevo estado gráfico usando **Aspose.Pdf for .NET**. + +Comenzaremos con un PDF en blanco, añadiremos un rectángulo semitransparente y guardaremos el resultado, todo en unas pocas líneas. Al final entenderás por qué el **diccionario ExtGState** es importante, cómo el **estado gráfico** controla tanto la opacidad del trazo como del relleno, y qué hace el **modo de fusión** internamente. + +## Qué Aprenderás + +- Cómo cargar un PDF existente con Aspose.Pdf. +- Cómo acceder y modificar el diccionario **ExtGState** en una página. +- Cómo crear un nuevo **estado gráfico** que define las entradas `CA`, `ca` y `BM`. +- Cómo guardar el documento modificado para que el efecto de transparencia sea visible en cualquier visor de PDF. +- Problemas comunes (p. ej., olvidar añadir el nuevo estado al diccionario de recursos) y soluciones rápidas. + +> **Requisitos previos:** Visual Studio 2022 (o cualquier IDE que prefieras), .NET 6 o posterior, y una licencia de Aspose.Pdf for .NET (la prueba gratuita funciona para esta demostración). + +--- + +## Paso 1: Cargar el Documento PDF + +Lo primero, abre el archivo que deseas editar. La clase `Aspose.Pdf.Document` se encarga de todo, desde el análisis hasta la escritura. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Por qué es importante:* Cargar el documento te da acceso a los objetos internos COS (Concrete Object Structure), que es donde reside el **estado gráfico**. Sin una instancia válida de `Document` no puedes alcanzar el **diccionario ExtGState**. + +--- + +## Paso 2: Obtener la Primera Página y su Diccionario de Recursos + +La transparencia se aplica a nivel de recursos de la página, por lo que necesitamos la colección de recursos de la página. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Consejo:** Si trabajas con PDFs de varias páginas, simplemente recorre `document.Pages` y repite los pasos para cada página que desees afectar. + +--- + +## Paso 3: Ubicar (o Crear) el Diccionario ExtGState + +La entrada **ExtGState** almacena todos los estados gráficos extendidos de la página. Si aún no existe, Aspose creará una vacía para nosotros. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Explicación:* +- `resourcesEditor["ExtGState"]` obtiene el diccionario existente. +- El operador de fusión nula (`??`) asegura que siempre tengamos un diccionario con el que trabajar, evitando una `NullReferenceException`. + +--- + +## Paso 4: Construir un Nuevo Estado Gráfico con Opacidad PDF + +Ahora definimos los parámetros reales de transparencia. `CA` controla la opacidad del trazo, `ca` controla la opacidad del relleno, y `BM` establece el modo de fusión (p. ej., “Normal”, “Multiply”, etc.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*¿Por qué estas claves?* +- `CA` (`Stroke opacity`) y `ca` (`Fill opacity`) son las dos entradas numéricas que la especificación PDF usa para expresar transparencia. +- `BM` (`Blend mode`) indica al renderizador cómo combinar el objeto transparente con el fondo; “Normal” es la opción más común. + +--- + +## Paso 5: Registrar el Nuevo Estado en el Diccionario ExtGState + +Le damos a nuestro estado gráfico un nombre (`GS0` en este ejemplo) y lo insertamos en la colección **ExtGState** de la página. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Consejo profesional:** Elige un nombre único (`GS1`, `GS2`, …) si planeas añadir varios estados. Reutilizar un nombre sobrescribirá la entrada anterior. + +--- + +## Paso 6: Aplicar el Estado Gráfico al Contenido (Opcional pero Recomendado) + +Si deseas ver el efecto de transparencia de inmediato, puedes dibujar un rectángulo usando el estado recién creado. Este paso no es estrictamente necesario para *agregar transparencia a PDF*; el estado ahora está disponible para cualquier flujo de contenido futuro, pero te ayuda a verificar que todo funciona. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Explicación:* +- `SetExtGState("GS0")` indica al flujo de contenido que use el estado gráfico que definimos. +- El rectángulo aparecerá con un 50 % de opacidad de relleno, confirmando que la configuración de **opacidad PDF** está activa. + +--- + +## Paso 7: Guardar el PDF Modificado + +Finalmente, escribe los cambios de vuelta al disco. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Abre `output.pdf` en Adobe Acrobat, Foxit o incluso en tu navegador; deberías ver el rectángulo semitransparente superpuesto al contenido de la página. + +--- + +## Ejemplo Completo Funcional + +Juntando todo, aquí tienes el programa completo listo para copiar y pegar: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Resultado Esperado + +- `output.pdf` contiene las páginas originales **más** un rectángulo rojo que es 50 % transparente. +- La entrada **ExtGState** `GS0` ahora forma parte del diccionario de recursos de la página, lista para reutilizarse. + +--- + +## Preguntas Frecuentes y Casos Límite + +| Pregunta | Respuesta | +|----------|-----------| +| **¿Necesito una licencia para ejecutar esto?** | Una licencia de prueba funciona para desarrollo y pruebas. Para producción necesitarás una licencia paga, de lo contrario la salida contendrá una marca de agua. | +| **¿Qué pasa si el PDF ya tiene una entrada ExtGState?** | El código verifica si ya existe un diccionario y lo reutiliza, por lo que no perderás los estados definidos previamente. | +| **¿Puedo establecer un modo de fusión diferente?** | Claro. Reemplaza `"Normal"` por `"Multiply"`, `"Screen"` o cualquier modo de fusión definido por PDF. | +| **¿Es `CA` obligatorio?** | No. Si omites `CA`, la opacidad del trazo por defecto es 1 (totalmente opaco). También puedes establecer solo `ca` para la transparencia del relleno. | +| **¿Cómo aplico el estado al texto?** | Usa `canvas.SetExtGState("GS0")` antes de llamar a `canvas.ShowText(...)`. El mismo estado gráfico funciona para texto, rutas e imágenes. | + +--- + +## Próximos Pasos + +Ahora + +## ¿Qué Deberías Aprender a Continuación? + +Los siguientes tutoriales cubren temas estrechamente relacionados que amplían las técnicas demostradas en esta guía. Cada recurso incluye ejemplos de código completos y funcionales con explicaciones paso a paso para ayudarte a dominar funciones adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [Agregar Sellos de Imagen a PDFs Usando Aspose.PDF para .NET: Guía Paso a Paso](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Cómo Agregar un Sello de Texto a PDF Usando Aspose.PDF .NET: Guía Completa](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [Cómo Agregar Sellos de Página en PDFs Usando Aspose.PDF para .NET: Guía Completa](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/advanced-features/_index.md b/pdf/swedish/net/advanced-features/_index.md index 712176e433..42c3ca932e 100644 --- a/pdf/swedish/net/advanced-features/_index.md +++ b/pdf/swedish/net/advanced-features/_index.md @@ -65,6 +65,9 @@ Lär dig skapa tillgängliga, formaterade taggade PDF-dokument med Aspose.PDF f ### [Hur man jämför PDF-filer i C# – En komplett guide för att generera PDF-diff](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Lär dig att jämföra PDF-dokument i C# och generera diff-filer med Aspose.PDF för .NET. +### [Lägg till transparens i PDF med Aspose.Pdf – Komplett .NET-guide](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Lär dig hur du lägger till transparens i PDF-dokument 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/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/swedish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..54c4f779b0 --- /dev/null +++ b/pdf/swedish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-07-29 +description: Lägg till transparens i PDF med Aspose.Pdf för .NET. Lär dig att ställa + in PDF-opacitet, blandningsläge och grafikstatus i en steg‑för‑steg‑handledning. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: sv +lastmod: 2026-07-29 +og_description: Lägg till transparens i PDF snabbt. Den här guiden visar hur du ställer + in PDF‑opacitet och blandningsläge med Aspose.Pdf för .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Lägg till transparens i PDF med Aspose.Pdf – Fullständig .NET-genomgång +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Lägg till transparens i PDF med Aspose.Pdf – Komplett .NET‑guide +url: /sv/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Lägg till transparens i PDF med Aspose.Pdf – Komplett .NET‑guide + +Har du någonsin behövt **lägga till transparens i PDF**‑filer men varit osäker på vilka API‑egenskaper som ska justeras? Du är inte ensam. I den här tutorialen går vi igenom ett praktiskt, end‑to‑end‑exempel som visar exakt hur du ställer in PDF‑opacitet, definierar ett blandningsläge och injicerar ett nytt graphics‑state med **Aspose.Pdf for .NET**. + +Vi börjar med en tom PDF, strör in en halvtransparent rektangel och sparar resultatet – allt på några få rader kod. I slutet förstår du varför **ExtGState‑dictionary** är viktig, hur **graphics state** styr både stroke‑ och fill‑opacitet, och vad **Blend mode** gör under huven. + +## Vad du kommer att lära dig + +- Hur du laddar en befintlig PDF med Aspose.Pdf. +- Hur du får åtkomst till och modifierar **ExtGState**‑dictionary på en sida. +- Hur du skapar ett nytt **graphics state** som definierar `CA`, `ca` och `BM`‑poster. +- Hur du sparar det ändrade dokumentet så att transparenseffekten syns i alla PDF‑visare. +- Vanliga fallgropar (t.ex. att glömma att lägga till det nya state‑et i resource‑dictionary) och snabba lösningar. + +> **Förutsättningar:** Visual Studio 2022 (eller någon annan IDE du föredrar), .NET 6 eller senare, samt en Aspose.Pdf for .NET‑licens (gratis provversion räcker för detta demo). + +--- + +## Steg 1: Ladda PDF‑dokumentet + +Först och främst – öppna filen du vill redigera. Klassen `Aspose.Pdf.Document` hanterar allt från parsning till skrivning. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Varför detta är viktigt:* När du laddar dokumentet får du åtkomst till de interna COS‑objekten (Concrete Object Structure), där **graphics state** lever. Utan en giltig `Document`‑instans kan du inte nå **ExtGState‑dictionary**. + +--- + +## Steg 2: Hämta den första sidan och dess resource‑dictionary + +Transparens appliceras på sidnivåns resursscope, så vi behöver sidans resource‑samling. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Tips:** Om du arbetar med fler‑sidiga PDF‑filer, loopa bara över `document.Pages` och upprepa stegen för varje sida du vill påverka. + +--- + +## Steg 3: Hitta (eller skapa) ExtGState‑dictionary + +**ExtGState**‑posten lagrar alla utökade graphics‑states för sidan. Om den ännu inte finns skapar Aspose en tom åt dig. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Förklaring:* +- `resourcesEditor["ExtGState"]` hämtar den befintliga dictionaryn. +- Null‑coalescing‑operatorn (`??`) säkerställer att vi alltid har en dictionary att arbeta med, vilket förhindrar ett `NullReferenceException`. + +--- + +## Steg 4: Bygg ett nytt graphics state med PDF‑opacitet + +Nu definierar vi de faktiska transparensparametrarna. `CA` styr stroke‑opacitet, `ca` styr fill‑opacitet, och `BM` sätter blandningsläget (t.ex. “Normal”, “Multiply”, osv.). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Varför dessa nycklar?* +- `CA` (`Stroke opacity`) och `ca` (`Fill opacity`) är de två numeriska posterna PDF‑specifikationen använder för att uttrycka transparens. +- `BM` (`Blend mode`) talar om för renderaren hur det transparenta objektet ska kombineras med bakgrunden; “Normal” är det vanligaste valet. + +--- + +## Steg 5: Registrera det nya state‑et i ExtGState‑dictionary + +Vi ger vårt graphics state ett namn (`GS0` i detta exempel) och lägger in det i sidans **ExtGState**‑samling. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Pro‑tips:** Välj ett unikt namn (`GS1`, `GS2`, …) om du planerar att lägga till flera states. Att återanvända ett namn kommer att skriva över den tidigare posten. + +--- + +## Steg 6: Applicera graphics state på innehållet (valfritt men rekommenderat) + +Om du vill se transparenseffekten omedelbart kan du rita en rektangel med det nyss skapade state‑et. Detta steg är inte strikt nödvändigt för *att lägga till transparens i PDF* – state‑et är nu tillgängligt för framtida content‑streams – men det hjälper dig verifiera att allt fungerar. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Förklaring:* +- `SetExtGState("GS0")` instruerar content‑streamen att använda det graphics state vi definierat. +- Rektangeln visas med 50 % fill‑opacitet, vilket bekräftar att **PDF‑opacitet**‑inställningarna är aktiva. + +--- + +## Steg 7: Spara den modifierade PDF‑filen + +Till sist, skriv tillbaka ändringarna till disk. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Öppna `output.pdf` i Adobe Acrobat, Foxit eller till och med i din webbläsare – du bör se den halvtransparenta rektangeln ovanpå sidans innehåll. + +--- + +## Fullt fungerande exempel + +Här är hela programmet, redo att kopieras och klistras in: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Förväntat resultat + +- `output.pdf` innehåller de ursprungliga sidorna **plus** en röd rektangel som är 50 % transparent. +- **ExtGState**‑posten `GS0` finns nu i sidans resource‑dictionary, redo att återanvändas. + +--- + +## Vanliga frågor & edge‑cases + +| Fråga | Svar | +|----------|--------| +| **Behöver jag en licens för att köra detta?** | En provlicens fungerar för utveckling och test. För produktion krävs en betald licens, annars får du ett vattenmärke i utskriften. | +| **Vad händer om PDF‑filen redan har en ExtGState‑post?** | Koden kontrollerar om en befintlig dictionary finns och återanvänder den, så du förlorar inga tidigare definierade states. | +| **Kan jag sätta ett annat blend‑mode?** | Absolut. Byt ut `"Normal"` mot `"Multiply"`, `"Screen"` eller något annat PDF‑definierat blend‑mode. | +| **Är `CA` obligatoriskt?** | Nej. Om du utelämnar `CA` blir stroke‑opaciteten 1 (fullt opakt) som standard. Du kan också bara sätta `ca` för fill‑transparens. | +| **Hur applicerar jag state‑et på text?** | Använd `canvas.SetExtGState("GS0")` innan du anropar `canvas.ShowText(...)`. Samma graphics state fungerar för text, paths och bilder. | + +--- + +## Nästa steg + +Nu + + +## Vad bör du lära dig härnäst? + + +Följande tutorials täcker närliggande ämnen som bygger vidare på teknikerna i den här guiden. Varje resurs innehåller kompletta kodexempel med steg‑för‑steg‑förklaringar för att hjälpa dig bemästra ytterligare API‑funktioner och utforska alternativa implementeringsmetoder i dina egna projekt. + +- [Add Image Stamps to PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [How to Add Page Stamps in PDFs Using Aspose.PDF for .NET: A Complete Guide](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/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/advanced-features/_index.md b/pdf/thai/net/advanced-features/_index.md index f4eff2fb35..ae25499a32 100644 --- a/pdf/thai/net/advanced-features/_index.md +++ b/pdf/thai/net/advanced-features/_index.md @@ -65,6 +65,9 @@ ### [วิธีเปรียบเทียบ PDF ใน C# – คู่มือฉบับสมบูรณ์ในการสร้าง PDF Diff](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) เรียนรู้วิธีเปรียบเทียบไฟล์ PDF ด้วย C# โดยใช้ Aspose.PDF เพื่อสร้างไฟล์ Diff อย่างละเอียด +### [เพิ่มความโปร่งใสให้ PDF ด้วย Aspose.Pdf – คู่มือ .NET ฉบับสมบูรณ์](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +เรียนรู้วิธีเพิ่มความโปร่งใสให้ไฟล์ PDF ด้วย Aspose.Pdf สำหรับ .NET พร้อมตัวอย่างโค้ดและขั้นตอนครบถ้วน + ## แหล่งข้อมูลเพิ่มเติม - [Aspose.PDF สำหรับเอกสารประกอบ Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/thai/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/thai/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..dd2c22fa10 --- /dev/null +++ b/pdf/thai/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-07-29 +description: เพิ่มความโปร่งใสให้กับ PDF ด้วย Aspose.Pdf for .NET เรียนรู้วิธีตั้งค่าความทึบของ + PDF โหมดการผสม และสถานะกราฟิกในบทแนะนำแบบขั้นตอนต่อขั้นตอน. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: th +lastmod: 2026-07-29 +og_description: เพิ่มความโปร่งใสให้กับ PDF อย่างรวดเร็ว คู่มือนี้แสดงวิธีตั้งค่าความทึบของ + PDF และโหมดผสมโดยใช้ Aspose.Pdf สำหรับ .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: เพิ่มความโปร่งใสให้ PDF ด้วย Aspose.Pdf – คู่มือเต็ม .NET +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: เพิ่มความโปร่งใสให้กับ PDF ด้วย Aspose.Pdf – คู่มือ .NET ฉบับสมบูรณ์ +url: /th/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# เพิ่มความโปร่งใสให้กับ PDF ด้วย Aspose.Pdf – คู่มือ .NET ฉบับเต็ม + +เคยต้องการ **เพิ่มความโปร่งใสให้กับไฟล์ PDF** แต่ไม่แน่ใจว่าต้องปรับคุณสมบัติของ API ไหนหรือไม่? คุณไม่ได้เป็นคนเดียว ในบทเรียนนี้เราจะพาคุณผ่านตัวอย่างเชิงปฏิบัติแบบครบวงจรที่แสดงอย่างชัดเจนว่าตั้งค่าความทึบของ PDF อย่างไร, กำหนดโหมดการผสมสี, และแทรกสถานะกราฟิกใหม่โดยใช้ **Aspose.Pdf for .NET**. + +เราจะเริ่มจาก PDF เปล่า, เติมสี่เหลี่ยมที่มีความโปร่งใสครึ่งหนึ่ง, แล้วบันทึกผลลัพธ์—ทั้งหมดในไม่กี่บรรทัดเท่านั้น. เมื่อจบคุณจะเข้าใจว่าทำไม **ExtGState dictionary** ถึงสำคัญ, **graphics state** ควบคุมความทึบของเส้นและการเติมอย่างไร, และ **Blend mode** ทำงานอย่างไรภายใน. + +## สิ่งที่คุณจะได้เรียนรู้ + +- วิธีโหลด PDF ที่มีอยู่แล้วด้วย Aspose.Pdf. +- วิธีเข้าถึงและแก้ไข **ExtGState** dictionary บนหน้า. +- วิธีสร้าง **graphics state** ใหม่ที่กำหนดค่า `CA`, `ca`, และ `BM`. +- วิธีบันทึกเอกสารที่แก้ไขแล้วเพื่อให้เอฟเฟกต์ความโปร่งใสแสดงผลในโปรแกรมอ่าน PDF ใดก็ได้. +- ข้อผิดพลาดทั่วไป (เช่น ลืมเพิ่มสถานะใหม่ลงใน resource dictionary) และวิธีแก้ไขอย่างรวดเร็ว. + +> **Prerequisites:** Visual Studio 2022 (หรือ IDE ใดก็ได้ที่คุณชอบ), .NET 6 หรือใหม่กว่า, และใบอนุญาต Aspose.Pdf for .NET (รุ่นทดลองฟรีทำงานได้สำหรับการสาธิตนี้). + +--- + +## ขั้นตอนที่ 1: โหลดเอกสาร PDF + +เริ่มต้นด้วยการเปิดไฟล์ที่คุณต้องการแก้ไข. คลาส `Aspose.Pdf.Document` จัดการทุกอย่างตั้งแต่การแยกวิเคราะห์จนถึงการเขียน. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*ทำไมสิ่งนี้ถึงสำคัญ:* การโหลดเอกสารทำให้คุณเข้าถึงวัตถุ COS (Concrete Object Structure) ภายใน, ซึ่งเป็นที่ที่ **graphics state** อยู่. หากไม่มีอินสแตนซ์ `Document` ที่ถูกต้องคุณจะไม่สามารถเข้าถึง **ExtGState dictionary** ได้. + +--- + +## ขั้นตอนที่ 2: ดึงหน้าแรกและ Resource Dictionary ของมัน + +ความโปร่งใสจะถูกนำไปใช้ในระดับ resource ของหน้า, ดังนั้นเราต้องการคอลเลกชัน resource ของหน้า. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Tip:** หากคุณทำงานกับ PDF หลายหน้า, เพียงวนลูป `document.Pages` และทำซ้ำขั้นตอนสำหรับแต่ละหน้าที่คุณต้องการปรับ. + +--- + +## ขั้นตอนที่ 3: ค้นหา (หรือสร้าง) ExtGState Dictionary + +**ExtGState** entry เก็บสถานะกราฟิกที่ขยายทั้งหมดสำหรับหน้า. หากยังไม่มี, Aspose จะสร้างอ็อบเจกต์ว่างให้เรา. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*คำอธิบาย:* +- `resourcesEditor["ExtGState"]` ดึงพจนานุกรมที่มีอยู่. +- ตัวดำเนินการ null‑coalescing (`??`) ทำให้เรามีพจนานุกรมเสมอเพื่อทำงาน, ป้องกัน `NullReferenceException`. + +--- + +## ขั้นตอนที่ 4: สร้าง Graphics State ใหม่ด้วยความทึบของ PDF + +ตอนนี้เรากำหนดพารามิเตอร์ความโปร่งใสจริง ๆ. `CA` ควบคุมความทึบของเส้น, `ca` ควบคุมความทึบของการเติม, และ `BM` ตั้งค่า blend mode (เช่น “Normal”, “Multiply”, เป็นต้น). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*ทำไมต้องใช้คีย์เหล่านี้?* +- `CA` (`Stroke opacity`) และ `ca` (`Fill opacity`) เป็นสองรายการเชิงตัวเลขที่สเปค PDF ใช้เพื่อแสดงความโปร่งใส. +- `BM` (`Blend mode`) บอกเรนเดอร์ว่าจะแบ่งรวมวัตถุโปร่งใสกับพื้นหลังอย่างไร; “Normal” เป็นตัวเลือกที่พบบ่อยที่สุด. + +--- + +## ขั้นตอนที่ 5: ลงทะเบียนสถานะใหม่ใน ExtGState Dictionary + +เราตั้งชื่อให้ graphics state ของเรา (`GS0` ในตัวอย่างนี้) และใส่ลงในคอลเลกชัน **ExtGState** ของหน้า. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Pro tip:** เลือกชื่อที่ไม่ซ้ำกัน (`GS1`, `GS2`, …) หากคุณตั้งใจจะเพิ่มหลายสถานะ. การใช้ชื่อซ้ำจะเขียนทับรายการก่อนหน้า. + +--- + +## ขั้นตอนที่ 6: ใช้ Graphics State กับเนื้อหา (ไม่บังคับแต่แนะนำ) + +หากคุณต้องการเห็นเอฟเฟกต์ความโปร่งใสทันที, คุณสามารถวาดสี่เหลี่ยมโดยใช้สถานะที่สร้างใหม่. ขั้นตอนนี้ไม่ได้จำเป็นอย่างเคร่งครัดสำหรับ *การเพิ่มความโปร่งใสให้กับ PDF*—สถานะนี้พร้อมใช้สำหรับสตรีมเนื้อหาใด ๆ ในอนาคต—แต่ช่วยให้คุณตรวจสอบว่าทุกอย่างทำงานได้. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*คำอธิบาย:* +- `SetExtGState("GS0")` บอกสตรีมเนื้อหาให้ใช้ graphics state ที่เรากำหนด. +- สี่เหลี่ยมจะปรากฏด้วยความทึบการเติม 50 %, ยืนยันว่าการตั้งค่า **PDF opacity** ทำงาน. + +--- + +## ขั้นตอนที่ 7: บันทึก PDF ที่แก้ไขแล้ว + +สุดท้าย, เขียนการเปลี่ยนแปลงกลับไปยังดิสก์. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +เปิด `output.pdf` ใน Adobe Acrobat, Foxit, หรือแม้แต่ในเบราว์เซอร์ของคุณ—คุณควรเห็นสี่เหลี่ยมครึ่งโปร่งใสที่ซ้อนบนเนื้อหาของหน้า. + +--- + +## ตัวอย่างทำงานเต็มรูปแบบ + +รวมทุกอย่างเข้าด้วยกัน, นี่คือโปรแกรมที่พร้อมคัดลอกและวางทั้งหมด: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### ผลลัพธ์ที่คาดหวัง + +- `output.pdf` มีหน้าต้นฉบับ **บวก** สี่เหลี่ยมสีแดงที่โปร่งใส 50 %. +- รายการ **ExtGState** `GS0` ตอนนี้เป็นส่วนหนึ่งของ resource dictionary ของหน้า, พร้อมใช้ซ้ำ. + +--- + +## คำถามทั่วไป & กรณีขอบ + +| Question | Answer | +|----------|--------| +| **ฉันต้องการใบอนุญาตเพื่อรันนี้หรือไม่?** | ใบอนุญาตทดลองทำงานได้สำหรับการพัฒนาและทดสอบ. สำหรับการใช้งานจริงคุณจะต้องมีใบอนุญาตแบบชำระเงิน, มิฉะนั้นผลลัพธ์จะมีลายน้ำ. | +| **ถ้า PDF มีรายการ ExtGState อยู่แล้วจะเป็นอย่างไร?** | โค้ดจะตรวจสอบพจนานุกรมที่มีอยู่และใช้ซ้ำ, ดังนั้นคุณจะไม่สูญเสียสถานะที่กำหนดไว้ก่อนหน้า. | +| **ฉันสามารถตั้งค่า blend mode ที่แตกต่างได้หรือไม่?** | ได้เลย. แทนที่ `"Normal"` ด้วย `"Multiply"`, `"Screen"` หรือ blend mode ใด ๆ ที่กำหนดใน PDF. | +| **`CA` จำเป็นหรือไม่?** | ไม่จำเป็น. หากคุณละ `CA`, ความทึบของเส้นจะเป็นค่าเริ่มต้น 1 (ทึบเต็ม). คุณสามารถตั้งค่าเพียง `ca` สำหรับความโปร่งใสของการเติมได้. | +| **ฉันจะใช้สถานะนี้กับข้อความอย่างไร?** | ใช้ `canvas.SetExtGState("GS0")` ก่อนเรียก `canvas.ShowText(...)`. graphics state เดียวกันนี้ทำงานกับข้อความ, เส้นทาง, และรูปภาพ. | + +--- + +## ขั้นตอนต่อไป + +ตอนนี้ + +## คุณควรเรียนรู้อะไรต่อไป? + +บทเรียนต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดซึ่งต่อยอดจากเทคนิคที่แสดงในคู่มือนี้. แต่ละแหล่งข้อมูลมีตัวอย่างโค้ดทำงานเต็มรูปแบบพร้อมคำอธิบายทีละขั้นตอนเพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจวิธีการนำไปใช้แบบอื่นในโครงการของคุณ. + +- [เพิ่มตราภาพลงใน PDF ด้วย Aspose.PDF for .NET: คู่มือขั้นตอนที่ละเอียด](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [วิธีเพิ่มตราข้อความลงใน PDF ด้วย Aspose.PDF .NET: คู่มือครบวงจร](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [วิธีเพิ่มตราหน้าลงใน PDF ด้วย Aspose.PDF for .NET: คู่มือฉบับสมบูรณ์](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/turkish/net/advanced-features/_index.md b/pdf/turkish/net/advanced-features/_index.md index 7cde85b48d..453cee11c4 100644 --- a/pdf/turkish/net/advanced-features/_index.md +++ b/pdf/turkish/net/advanced-features/_index.md @@ -63,7 +63,8 @@ PDF/UA-1 standardına göre erişilebilir PDF belgelerini doğrulamak ve işleme Aspose.PDF for .NET kullanarak erişilebilir, biçimlendirilmiş etiketli PDF belgeleri oluşturmayı öğrenin. Yapılandırılmış tablolar ve gelişmiş erişilebilirlikle uyumlu PDF'ler oluşturmada ustalaşın. ### [C# ile PDF'leri Karşılaştırma – PDF Diff Oluşturma İçin Tam Kılavuz](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) -C# ve Aspose.PDF kullanarak PDF dosyalarını karşılaştırmayı, farkları (diff) oluşturmayı ve raporlamayı öğrenin. + +### [Aspose.Pdf ile PDF'ye Şeffaflık Ekleme – Tam .NET Kılavuzu](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) ## Ek Kaynaklar diff --git a/pdf/turkish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/turkish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..39f4561548 --- /dev/null +++ b/pdf/turkish/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-07-29 +description: Aspose.Pdf for .NET ile PDF'ye şeffaflık ekleyin. PDF opaklığını, karışım + modunu ve grafik durumunu adım adım bir öğreticide öğrenin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: tr +lastmod: 2026-07-29 +og_description: PDF'ye hızlıca şeffaflık ekleyin. Bu kılavuz, Aspose.Pdf for .NET + kullanarak PDF opaklığını ve karışım modunu nasıl ayarlayacağınızı gösterir. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Aspose.Pdf ile PDF'ye Şeffaflık Ekle – Tam .NET Kılavuzu +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Aspose.Pdf ile PDF'ye Şeffaflık Ekle – Tam .NET Rehberi +url: /tr/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Pdf ile PDF'ye Şeffaflık Ekle – Tam .NET Kılavuzu + +PDF dosyalarına **şeffaflık eklemeniz** gerektiğinde hangi API özelliklerini ayarlamanız gerektiğini bilemediniz mi? Tek başınıza değilsiniz. Bu öğreticide, PDF opaklığını nasıl ayarlayacağınızı, bir karışım modunu (blend mode) nasıl tanımlayacağınızı ve **Aspose.Pdf for .NET** kullanarak yeni bir grafik durumunu (graphics state) nasıl enjekte edeceğinizi gösteren pratik, uçtan uca bir örnek üzerinden ilerleyeceğiz. + +Boş bir PDF ile başlayıp yarı şeffaf bir dikdörtgen ekleyecek ve sonucu sadece birkaç satır kodla kaydedeceğiz. Sonunda **ExtGState sözlüğünün** (dictionary) neden önemli olduğunu, **grafik durumunun** hem çizgi hem de dolgu opaklığını nasıl kontrol ettiğini ve **Blend mode**'un (karışım modu) ne işe yaradığını anlayacaksınız. + +## Öğrenecekleriniz + +- Aspose.Pdf ile mevcut bir PDF nasıl yüklenir. +- Bir sayfadaki **ExtGState** sözlüğüne nasıl erişilir ve nasıl değiştirilir. +- `CA`, `ca` ve `BM` girişlerini tanımlayan yeni bir **grafik durumu** nasıl oluşturulur. +- Değiştirilen belge nasıl kaydedilir, böylece şeffaflık etkisi herhangi bir PDF görüntüleyicide görünür. +- Yaygın tuzaklar (ör. yeni durumun kaynak sözlüğüne eklenmeyi unutmak) ve hızlı çözümler. + +> **Önkoşullar:** Visual Studio 2022 (veya tercih ettiğiniz herhangi bir IDE), .NET 6 veya üzeri ve bir Aspose.Pdf for .NET lisansı (bu demo için ücretsiz deneme sürümü yeterli). + +--- + +## Adım 1: PDF Belgesini Yükleyin + +İlk iş, düzenlemek istediğiniz dosyayı açmaktır. `Aspose.Pdf.Document` sınıfı, ayrıştırmadan yazmaya kadar her şeyi halleder. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Neden önemli:* Belgeyi yüklemek, **grafik durumunun** bulunduğu iç COS (Concrete Object Structure) nesnelerine erişmenizi sağlar. Geçerli bir `Document` örneği olmadan **ExtGState sözlüğüne** ulaşamazsınız. + +--- + +## Adım 2: İlk Sayfayı ve Kaynak Sözlüğünü Alın + +Şeffaflık, sayfa‑seviyesi kaynak kapsamında uygulanır; bu yüzden sayfanın kaynak koleksiyonuna ihtiyacımız var. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **İpucu:** Çok sayfalı PDF'lerle çalışıyorsanız, `document.Pages` üzerinde döngü kurarak etkilemek istediğiniz her sayfa için adımları tekrarlayın. + +--- + +## Adım 3: ExtGState Sözlüğünü Bulun (veya Oluşturun) + +**ExtGState** girişi, sayfa için tanımlanmış tüm genişletilmiş grafik durumlarını saklar. Henüz yoksa, Aspose bizim için boş bir sözlük oluşturur. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Açıklama:* +- `resourcesEditor["ExtGState"]` mevcut sözlüğü getirir. +- Null‑birleştirme operatörü (`??`) her zaman üzerinde çalışabileceğimiz bir sözlüğün olmasını sağlar, `NullReferenceException` hatasını önler. + +--- + +## Adım 4: PDF Opaklığıyla Yeni Bir Grafik Durumu Oluşturun + +Şimdi gerçek şeffaflık parametrelerini tanımlıyoruz. `CA` çizgi (stroke) opaklığını, `ca` dolgu (fill) opaklığını kontrol eder ve `BM` karışım modunu (ör. “Normal”, “Multiply” vb.) ayarlar. + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Bu anahtarlar neden?* +- `CA` (`Stroke opacity`) ve `ca` (`Fill opacity`) PDF spesifikasyonunun şeffaflığı ifade etmek için kullandığı iki sayısal girdidir. +- `BM` (`Blend mode`) renderlayıcıya şeffaf nesneyi arka planla nasıl birleştireceğini söyler; “Normal” en yaygın seçimdir. + +--- + +## Adım 5: Yeni Durumu ExtGState Sözlüğüne Kaydedin + +Grafik durumumuza bir ad (`GS0` bu örnekte) veriyoruz ve sayfanın **ExtGState** koleksiyonuna ekliyoruz. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Pro ipucu:** Birden fazla durum eklemeyi planlıyorsanız benzersiz bir ad (`GS1`, `GS2`, …) seçin. Aynı adı yeniden kullanmak önceki girdiyi üzerine yazar. + +--- + +## Adım 6: Grafik Durumunu İçeriğe Uygulayın (Opsiyonel ama Tavsiye Edilir) + +Şeffaflık etkisini hemen görmek istiyorsanız, yeni oluşturulan durumla bir dikdörtgen çizebilirsiniz. Bu adım *PDF'ye şeffaflık eklemek* için zorunlu değildir—durum artık gelecekteki içerik akışları için kullanılabilir—ancak her şeyin çalıştığını doğrulamanıza yardımcı olur. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Açıklama:* +- `SetExtGState("GS0")` içerik akışına tanımladığımız grafik durumunu kullanmasını söyler. +- Dikdörtgen %50 dolgu opaklığıyla görünecek ve **PDF opaklığı** ayarlarının aktif olduğunu onaylayacaktır. + +--- + +## Adım 7: Değiştirilen PDF'yi Kaydedin + +Son olarak değişiklikleri diske yazalım. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +`output.pdf` dosyasını Adobe Acrobat, Foxit ya da tarayıcınızda açın— sayfa içeriğinin üzerine yarı şeffaf bir dikdörtgen yerleşmiş olmalı. + +--- + +## Tam Çalışan Örnek + +Hepsini bir araya getirdiğimizde, kopyala‑yapıştır yapmaya hazır tam program aşağıdadır: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Beklenen Çıktı + +- `output.pdf` orijinal sayfalara **ek olarak** %50 şeffaf kırmızı bir dikdörtgen içerir. +- **ExtGState** girişi `GS0` artık sayfanın kaynak sözlüğünün bir parçası ve yeniden kullanılmaya hazır. + +--- + +## Yaygın Sorular & Kenar Durumları + +| Soru | Cevap | +|------|-------| +| **Bu kodu çalıştırmak için lisansa ihtiyacım var mı?** | Geliştirme ve test için bir deneme lisansı yeterlidir. Üretim ortamında ücretli lisans gerekir, aksi takdirde çıktı üzerine filigran eklenir. | +| **PDF zaten bir ExtGState girdisine sahip olsaydı ne olur?** | Kod mevcut sözlüğü kontrol eder ve üzerine ekler, daha önce tanımlanmış durumları kaybetmezsiniz. | +| **Farklı bir blend mode ayarlayabilir miyim?** | Tabii ki. `"Normal"` yerine `"Multiply"`, `"Screen"` veya PDF tarafından tanımlı başka bir blend mode yazabilirsiniz. | +| **`CA` zorunlu mu?** | Hayır. `CA`'yi atladığınızda çizgi opaklığı varsayılan olarak 1 (tamamen opak) olur. Sadece `ca` ayarlayarak sadece dolgu şeffaflığı elde edebilirsiniz. | +| **Durumu metne nasıl uygularım?** | `canvas.SetExtGState("GS0")` çağrısını `canvas.ShowText(...)` öncesinde kullanın. Aynı grafik durumu metin, yollar ve görüntüler için çalışır. | + +--- + +## Sonraki Adımlar + +Şimdi + +## Sonraki Öğrenmeniz Gerekenler + +Aşağıdaki öğreticiler, bu kılavuzda gösterilen tekniklere dayanan ve ilgili konuları derinlemesine ele alan tam çalışan kod örnekleri ve adım‑adım açıklamalar sunar; böylece API özelliklerini daha iyi kavrayabilir ve projelerinizde alternatif uygulama yaklaşımlarını keşfedebilirsiniz. + +- [PDF'lere Görüntü Damgası Ekleme Aspose.PDF for .NET: Adım Adım Kılavuz](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [PDF'ye Metin Damgası Ekleme Aspose.PDF .NET: Kapsamlı Rehber](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [PDF'lerde Sayfa Damgası Ekleme Aspose.PDF for .NET: Tam Kılavuz](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/advanced-features/_index.md b/pdf/vietnamese/net/advanced-features/_index.md index 5f49df0678..f9a4a35c71 100644 --- a/pdf/vietnamese/net/advanced-features/_index.md +++ b/pdf/vietnamese/net/advanced-features/_index.md @@ -64,6 +64,9 @@ Tìm hiểu cách sử dụng Aspose.PDF cho .NET để xác thực và xử lý ### [Cách so sánh PDF trong C# – Hướng dẫn toàn diện tạo PDF Diff](./how-to-compare-pdfs-in-c-complete-guide-to-generating-pdf-di/) Tìm hiểu cách so sánh các tệp PDF trong C# và tạo báo cáo sự khác biệt PDF một cách chi tiết. +### [Thêm Độ Trong Suốt vào PDF với Aspose.Pdf – Hướng Dẫn .NET Toàn Diện](./add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/) +Tìm hiểu cách thêm độ trong suốt vào tệp PDF bằng Aspose.Pdf cho .NET, 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/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md b/pdf/vietnamese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md new file mode 100644 index 0000000000..d17410b201 --- /dev/null +++ b/pdf/vietnamese/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-07-29 +description: Thêm độ trong suốt vào PDF bằng Aspose.Pdf cho .NET. Học cách thiết lập + độ trong suốt của PDF, chế độ pha trộn và trạng thái đồ họa trong một hướng dẫn + từng bước. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add transparency to pdf +- Aspose.Pdf for .NET +- ExtGState dictionary +- PDF opacity +- graphics state +- Blend mode +language: vi +lastmod: 2026-07-29 +og_description: Thêm độ trong suốt vào PDF nhanh chóng. Hướng dẫn này cho thấy cách + thiết lập độ trong suốt và chế độ hòa trộn của PDF bằng Aspose.Pdf cho .NET. +og_image_alt: Screenshot of a PDF page showing transparent overlay created with Aspose.Pdf +og_title: Thêm Độ Trong Suốt vào PDF với Aspose.Pdf – Hướng Dẫn .NET Toàn Diện +schemas: +- author: Aspose + dateModified: '2026-07-29' + description: Add transparency to PDF using Aspose.Pdf for .NET. Learn to set PDF + opacity, blend mode, and graphics state in a step‑by‑step tutorial. + headline: Add Transparency to PDF with Aspose.Pdf – Complete .NET Guide + type: TechArticle +tags: +- PDF +- Aspose.Pdf +- .NET +title: Thêm Độ Trong Suốt vào PDF với Aspose.Pdf – Hướng Dẫn .NET Toàn Diện +url: /vi/net/advanced-features/add-transparency-to-pdf-with-aspose-pdf-complete-net-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Thêm Độ Trong Suốt vào PDF với Aspose.Pdf – Hướng Dẫn .NET Đầy Đủ + +Bạn đã bao giờ cần **thêm độ trong suốt vào file PDF** nhưng không chắc thuộc tính API nào cần điều chỉnh? Bạn không phải là người duy nhất. Trong tutorial này, chúng ta sẽ đi qua một ví dụ thực tế, từ đầu đến cuối, cho thấy cách thiết lập độ mờ của PDF, xác định chế độ hòa trộn, và chèn một trạng thái đồ họa mới bằng **Aspose.Pdf for .NET**. + +Chúng ta sẽ bắt đầu với một PDF trống, thêm vào một hình chữ nhật bán trong suốt, và lưu kết quả—tất cả chỉ trong vài dòng code. Khi kết thúc, bạn sẽ hiểu vì sao **dictionary ExtGState** quan trọng, cách **trạng thái đồ họa** kiểm soát độ trong suốt của nét vẽ và tô màu, và chức năng của **Blend mode** phía sau. + +## Những Điều Bạn Sẽ Học + +- Cách tải một PDF hiện có bằng Aspose.Pdf. +- Cách truy cập và sửa đổi dictionary **ExtGState** trên một trang. +- Cách tạo một **trạng thái đồ họa** mới định nghĩa các mục `CA`, `ca`, và `BM`. +- Cách lưu tài liệu đã thay đổi để hiệu ứng trong suốt hiển thị trong bất kỳ trình xem PDF nào. +- Các lỗi thường gặp (ví dụ: quên thêm trạng thái mới vào dictionary tài nguyên) và cách khắc phục nhanh. + +> **Yêu cầu trước:** Visual Studio 2022 (hoặc bất kỳ IDE nào bạn thích), .NET 6 hoặc mới hơn, và giấy phép Aspose.Pdf for .NET (bản dùng thử miễn phí đủ cho demo này). + +--- + +## Bước 1: Tải Tài Liệu PDF + +Đầu tiên, mở file bạn muốn chỉnh sửa. Lớp `Aspose.Pdf.Document` xử lý mọi thứ từ phân tích đến ghi. + +```csharp +// Step 1: Load the PDF document +string pdfPath = @"C:\Temp\input.pdf"; // replace with your actual path +using var document = new Aspose.Pdf.Document(pdfPath); +``` + +*Lý do quan trọng:* Việc tải tài liệu cho phép bạn truy cập các đối tượng COS (Concrete Object Structure) nội bộ, nơi **trạng thái đồ họa** được lưu trữ. Nếu không có một thể hiện `Document` hợp lệ, bạn không thể tiếp cận **dictionary ExtGState**. + +--- + +## Bước 2: Lấy Trang Đầu Tiên và Dictionary Tài Nguyên Của Nó + +Độ trong suốt được áp dụng ở mức tài nguyên của trang, vì vậy chúng ta cần bộ sưu tập tài nguyên của trang. + +```csharp +// Step 2: Access the first page and its resource dictionary +var page = document.Pages[1]; // pages are 1‑based in Aspose +var resourcesEditor = new Aspose.Pdf.Text.DictionaryEditor(page.Resources); +``` + +> **Mẹo:** Nếu bạn đang làm việc với PDF đa trang, chỉ cần lặp qua `document.Pages` và lặp lại các bước cho mỗi trang bạn muốn ảnh hưởng. + +--- + +## Bước 3: Tìm (hoặc Tạo) Dictionary ExtGState + +Mục **ExtGState** lưu trữ tất cả các trạng thái đồ họa mở rộng cho trang. Nếu nó chưa tồn tại, Aspose sẽ tạo một dictionary rỗng cho chúng ta. + +```csharp +// Step 3: Retrieve the ExtGState dictionary where graphics states are stored +var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(document); +``` + +*Giải thích:* +- `resourcesEditor["ExtGState"]` lấy dictionary hiện có. +- Toán tử hợp nhất null (`??`) đảm bảo chúng ta luôn có một dictionary để làm việc, tránh `NullReferenceException`. + +--- + +## Bước 4: Xây Dựng Trạng Thái Đồ Họa Mới với Độ Trong Suốt PDF + +Bây giờ chúng ta định nghĩa các tham số trong suốt thực tế. `CA` kiểm soát độ trong suốt của nét vẽ, `ca` kiểm soát độ trong suốt của phần tô, và `BM` đặt chế độ hòa trộn (ví dụ: “Normal”, “Multiply”, …). + +```csharp +// Step 4: Create a new graphics state dictionary and define its parameters +var newGraphicsState = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(document); + +var parameters = new (string Name, Aspose.Pdf.Cos.ICosPdfPrimitive Value)[] +{ + ("CA", new Aspose.Pdf.Cos.CosPdfNumber(1.0)), // Stroke opacity = 100% + ("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.5)), // Fill opacity = 50% + ("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")) // Blend mode = Normal +}; + +foreach (var (name, value) in parameters) +{ + newGraphicsState.Add(name, value); +} +``` + +*Tại sao lại dùng các khóa này?* +- `CA` (`Stroke opacity`) và `ca` (`Fill opacity`) là hai mục số mà chuẩn PDF sử dụng để biểu thị độ trong suốt. +- `BM` (`Blend mode`) cho trình render biết cách kết hợp đối tượng trong suốt với nền; “Normal” là lựa chọn phổ biến nhất. + +--- + +## Bước 5: Đăng Ký Trạng Thái Mới vào Dictionary ExtGState + +Chúng ta đặt cho trạng thái đồ họa một tên (`GS0` trong ví dụ này) và chèn nó vào collection **ExtGState** của trang. + +```csharp +// Step 5: Add the new graphics state to the ExtGState dictionary with a name +extGState.Add("GS0", newGraphicsState); + +// Ensure the page's Resources point to the updated ExtGState +resourcesEditor["ExtGState"] = extGState; +``` + +> **Pro tip:** Chọn một tên duy nhất (`GS1`, `GS2`, …) nếu bạn dự định thêm nhiều trạng thái. Việc dùng lại một tên sẽ ghi đè mục trước đó. + +--- + +## Bước 6: Áp Dụng Trạng Thái Đồ Họa vào Nội Dung (Tùy Chọn nhưng Được Khuyến Khích) + +Nếu bạn muốn thấy hiệu ứng trong suốt ngay lập tức, có thể vẽ một hình chữ nhật bằng trạng thái vừa tạo. Bước này không bắt buộc để *thêm độ trong suốt vào PDF*—trạng thái đã sẵn sàng cho bất kỳ luồng nội dung nào trong tương lai—nhưng nó giúp bạn xác nhận mọi thứ hoạt động. + +```csharp +// Optional: Draw a semi‑transparent rectangle using the new graphics state +var canvas = new Aspose.Pdf.Drawing.Graphic(page); +canvas.SetExtGState("GS0"); // reference the state we just added +canvas.Rectangle(100, 500, 200, 100); // x, y, width, height +canvas.FillColor = Aspose.Pdf.Drawing.Color.FromRgba(255, 0, 0, 128); // red with 50% alpha +canvas.StrokeColor = Aspose.Pdf.Drawing.Color.Black; +canvas.Draw(); +``` + +*Giải thích:* +- `SetExtGState("GS0")` báo cho luồng nội dung sử dụng trạng thái đồ họa mà chúng ta đã định nghĩa. +- Hình chữ nhật sẽ xuất hiện với độ trong suốt 50 % khi tô, xác nhận các cài đặt **PDF opacity** đã có hiệu lực. + +--- + +## Bước 7: Lưu PDF Đã Sửa Đổi + +Cuối cùng, ghi các thay đổi trở lại đĩa. + +```csharp +// Step 7: Save the modified PDF +string outputPath = @"C:\Temp\output.pdf"; +document.Save(outputPath); +``` + +Mở `output.pdf` bằng Adobe Acrobat, Foxit, hoặc ngay trong trình duyệt—bạn sẽ thấy hình chữ nhật bán trong suốt phủ lên nội dung trang. + +--- + +## Ví Dụ Hoàn Chỉnh + +Kết hợp tất cả lại, đây là chương trình hoàn chỉnh, sẵn sàng sao chép‑dán: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Cos; +using Aspose.Pdf.Drawing; +using Aspose.Pdf.Text; + +class Program +{ + static void Main() + { + // Load the source PDF + string pdfPath = @"C:\Temp\input.pdf"; + using var document = new Document(pdfPath); + + // Access first page and its resources + var page = document.Pages[1]; + var resourcesEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create ExtGState dictionary + var extGState = resourcesEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(document); + + // Build new graphics state (stroke opacity 1, fill opacity 0.5, normal blend) + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(document); + var parameters = new (string, ICosPdfPrimitive)[] + { + ("CA", new CosPdfNumber(1.0)), + ("ca", new CosPdfNumber(0.5)), + ("BM", new CosPdfName("Normal")) + }; + foreach (var (name, value) in parameters) + newGraphicsState.Add(name, value); + + // Add graphics state to ExtGState with a unique name + extGState.Add("GS0", newGraphicsState); + resourcesEditor["ExtGState"] = extGState; // update page resources + + // OPTIONAL: draw a rectangle using the new state to verify + var canvas = new Graphic(page); + canvas.SetExtGState("GS0"); + canvas.Rectangle(100, 500, 200, 100); + canvas.FillColor = Color.FromRgba(255, 0, 0, 128); // 50% transparent red + canvas.StrokeColor = Color.Black; + canvas.Draw(); + + // Save the output PDF + string outputPath = @"C:\Temp\output.pdf"; + document.Save(outputPath); + } +} +``` + +### Kết Quả Mong Đợi + +- `output.pdf` chứa các trang gốc **cộng** một hình chữ nhật màu đỏ có độ trong suốt 50 %. +- Mục **ExtGState** `GS0` hiện là một phần của dictionary tài nguyên của trang, sẵn sàng tái sử dụng. + +--- + +## Câu Hỏi Thường Gặp & Các Trường Hợp Cạnh + +| Câu hỏi | Trả lời | +|----------|--------| +| **Tôi có cần giấy phép để chạy đoạn code này không?** | Giấy phép dùng thử đủ cho phát triển và thử nghiệm. Đối với môi trường production, bạn sẽ cần giấy phép trả phí, nếu không đầu ra sẽ có watermark. | +| **Nếu PDF đã có mục ExtGState thì sao?** | Code sẽ kiểm tra sự tồn tại của dictionary và tái sử dụng nó, vì vậy bạn sẽ không mất bất kỳ trạng thái nào đã được định nghĩa trước. | +| **Tôi có thể đặt chế độ hòa trộn khác không?** | Chắc chắn. Thay `"Normal"` bằng `"Multiply"`, `"Screen"` hoặc bất kỳ chế độ hòa trộn nào được định nghĩa trong PDF. | +| **`CA` có bắt buộc không?** | Không. Nếu bạn bỏ qua `CA`, độ trong suốt của nét vẽ sẽ mặc định là 1 (đầy đủ). Bạn cũng có thể chỉ đặt `ca` để tạo độ trong suốt cho phần tô. | +| **Làm sao áp dụng trạng thái này cho văn bản?** | Dùng `canvas.SetExtGState("GS0")` trước khi gọi `canvas.ShowText(...)`. Trạng thái đồ họa này hoạt động cho văn bản, đường nét và hình ảnh. | + +--- + +## Bước Tiếp Theo + +Now + +## Bạn Nên Học Gì Tiếp Theo? + + +Các tutorial dưới đây đề cập đến các chủ đề liên quan chặt chẽ, xây dựng trên các kỹ thuật được trình bày trong hướng dẫn này. Mỗi tài nguyên bao gồm mã nguồn đầy đủ và các giải thích từng bước để giúp bạn làm chủ các tính năng API bổ sung và khám phá các cách triển khai thay thế trong dự án của mình. + +- [Add Image Stamps to PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) +- [How to Add Page Stamps in PDFs Using Aspose.PDF for .NET: A Complete Guide](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file