From c6f4cfe3e591c0fa5861420eb21ccd23ae194170 Mon Sep 17 00:00:00 2001 From: Muhammad Adil Date: Tue, 7 Jul 2026 10:16:11 +0000 Subject: [PATCH] Add 1 pdf net tutorials MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Categories: images-graphics Source: AI Search API Tutorials: - Add ExtGState to PDF with Aspose.Pdf – Complete Guide Auto-generated by Professionalize.Tutorials Agent --- pdf/arabic/net/images-graphics/_index.md | 4 +- .../_index.md | 193 ++++++++++++++++ pdf/chinese/net/images-graphics/_index.md | 3 + .../_index.md | 191 ++++++++++++++++ pdf/czech/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ pdf/dutch/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ pdf/english/net/images-graphics/_index.md | 5 +- .../_index.md | 209 ++++++++++++++++++ .../og-image.png | Bin 0 -> 51563 bytes pdf/french/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ pdf/german/net/images-graphics/_index.md | 13 +- .../_index.md | 195 ++++++++++++++++ pdf/greek/net/images-graphics/_index.md | 4 +- .../_index.md | 196 ++++++++++++++++ pdf/hindi/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ pdf/hongkong/net/images-graphics/_index.md | 5 +- .../_index.md | 191 ++++++++++++++++ pdf/hungarian/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ pdf/indonesian/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ pdf/italian/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ pdf/japanese/net/images-graphics/_index.md | 3 + .../_index.md | 192 ++++++++++++++++ pdf/korean/net/images-graphics/_index.md | 14 +- .../_index.md | 193 ++++++++++++++++ pdf/polish/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ pdf/portuguese/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ pdf/russian/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ pdf/spanish/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ pdf/swedish/net/images-graphics/_index.md | 5 +- .../_index.md | 194 ++++++++++++++++ pdf/thai/net/images-graphics/_index.md | 3 + .../_index.md | 193 ++++++++++++++++ pdf/turkish/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ pdf/vietnamese/net/images-graphics/_index.md | 3 + .../_index.md | 195 ++++++++++++++++ 47 files changed, 4560 insertions(+), 20 deletions(-) create mode 100644 pdf/arabic/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/chinese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/czech/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/dutch/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/english/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/english/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/og-image.png create mode 100644 pdf/french/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/german/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/greek/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/hindi/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/hongkong/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/hungarian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/indonesian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/italian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/japanese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/korean/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/polish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/portuguese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/russian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/spanish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/swedish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/thai/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/turkish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/vietnamese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md diff --git a/pdf/arabic/net/images-graphics/_index.md b/pdf/arabic/net/images-graphics/_index.md index 639cafdd28..1850723b28 100644 --- a/pdf/arabic/net/images-graphics/_index.md +++ b/pdf/arabic/net/images-graphics/_index.md @@ -147,7 +147,7 @@ تعرّف على كيفية استبدال الصور بكفاءة في مستندات PDF باستخدام Aspose.PDF لـ .NET. حسّن تحديثات مستنداتك باستخدام هذا الدليل الشامل للمطورين. ### [كيفية استبدال الصور في ملفات PDF باستخدام Aspose.PDF لـ .NET: دليل شامل](./replace-images-aspose-pdf-net-tutorial/) -تعرّف على كيفية استبدال الصور بكفاءة في مستندات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل الشامل الإعداد والتنفيذ والتطبيقات العملية. +تعرّف على كيفية استبدال الصور بكفاءة في ملفات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل الشامل الإعداد والتنفيذ والتطبيقات العملية. ### [كيفية تعيين حجم الصورة في ملف PDF باستخدام Aspose.PDF لـ .NET](./set-image-size-pdf-aspose-dotnet/) تعرف على كيفية ضبط أحجام الصور في ملفات PDF باستخدام Aspose.PDF لـ .NET، وهو مثالي لإنشاء المستندات والعروض التقديمية الاحترافية. @@ -164,6 +164,8 @@ ### [تعيين خلفيات الصور في ملفات PDF باستخدام Aspose.PDF لـ .NET: دليل شامل](./aspose-pdf-net-set-image-backgrounds/) تعرّف على كيفية تحسين مستندات PDF الخاصة بك عن طريق تعيين خلفيات الصور باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل نصائح للإعداد والتنفيذ والتحسين. +### [إضافة ExtGState إلى PDF باستخدام Aspose.PDF – دليل شامل](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) + ## موارد إضافية - [توثيق Aspose.PDF للشبكة](https://docs.aspose.com/pdf/net/) diff --git a/pdf/arabic/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/arabic/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..a0f56cf3f9 --- /dev/null +++ b/pdf/arabic/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,193 @@ +--- +category: general +date: 2026-07-07 +description: تعلم كيفية إضافة ExtGState إلى ملف PDF باستخدام Aspose.Pdf. يغطي هذا + الدليل خطوة بخطوة قاموس حالة الرسومات، تحرير موارد PDF، وإعدادات وضع الدمج. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: ar +lastmod: 2026-07-07 +og_description: إضافة ExtGState إلى PDF باستخدام Aspose.Pdf. اتبع هذا الدليل لتعديل + موارد PDF، وإنشاء قاموس حالة الرسومات، وتعيين الشفافية ووضع الدمج، وحفظ النتيجة. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: إضافة ExtGState إلى PDF – دليل Aspose.Pdf خطوة بخطوة +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: إضافة ExtGState إلى PDF باستخدام Aspose.Pdf – دليل كامل +url: /ar/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# إضافة ExtGState إلى PDF – دليل برمجة كامل + +هل احتجت يومًا إلى **إضافة ExtGState إلى PDF** لكن لم تكن متأكدًا من أي استدعاءات API تستخدم؟ لست وحدك. في هذا الدرس سنستعرض الخطوات الدقيقة باستخدام **Aspose.Pdf** لتعديل موارد الصفحة، وإنشاء **قائمة حالة الرسومات** مخصصة، وتعيين الشفافية ووضع المزج — كل ذلك في بضع أسطر فقط من C#. + +سنبدأ بتحميل ملف PDF موجود، ثم نتعمق في **موارد PDF** الخاصة به، ونُدخل إدخال ExtGState جديد، وأخيرًا نحفظ المستند المعدل. في النهاية ستحصل على قطعة شفرة قابلة لإعادة الاستخدام يمكنك إدراجها في أي مشروع .NET يحتاج إلى تحكم دقيق في الرسومات. + +## ما ستحتاجه + +- .NET 6 (أو أي نسخة حديثة من .NET Framework) +- حزمة NuGet **Aspose.Pdf for .NET** (`Aspose.Pdf`) +- ملف PDF إدخال (`input.pdf`) موجود في مجلد يمكنك الإشارة إليه +- فهم أساسي لصياغة C# (لا حاجة لمعرفة عميقة بداخلية PDF) + +إذا كان لديك كل ذلك، هيا نبدأ. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="إضافة ExtGState إلى PDF باستخدام Aspose.Pdf"} + +## الخطوة 1: إضافة ExtGState إلى PDF – تحميل المستند + +أول شيء علينا القيام به هو فتح ملف PDF الذي نريد تعديله. استخدام كتلة `using` يضمن تحرير مقبض الملف تلقائيًا، وهو أمر مفيد خاصةً عندما تقوم لاحقًا بالكتابة فوق نفس الملف. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*لماذا هذا مهم:* تحميل الملف يمنحك الوصول إلى مجموعة `Pages`، حيث توجد **موارد PDF** لكل صفحة. بدون فتح المستند لا يمكنك تعديل قاموس ExtGState. + +## الخطوة 2: الوصول إلى موارد PDF باستخدام Aspose.Pdf + +كل صفحة في PDF تحتوي على قاموس `/Resources` الذي يخزن الخطوط، الصور، وحالات الرسومات. نحتاج إلى الحصول على موارد الصفحة الأولى وتغليفها في `DictionaryEditor` حتى نتمكن من قراءة وكتابة الإدخالات. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*نصيحة احترافية:* إذا كان ملف PDF يحتوي على عدة صفحات وتحتاج إلى نفس ExtGState على جميعها، قم بالتكرار عبر `pdfDocument.Pages` وكرر الخطوات التالية لكل صفحة. + +## الخطوة 3: استرجاع قاموس ExtGState الموجود (أو إنشاء واحد) + +قد يكون إدخال `/ExtGState` موجودًا بالفعل. نقوم بجلبه حتى نضيف حالة الرسومات الجديدة تحت مفتاح فريد. إذا لم يكن موجودًا، سيُصدر Aspose.Pdf استثناء، لذا نحمي من ذلك بإنشاء قاموس جديد عند الحاجة. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*ما يحدث:* `resourcesEditor["ExtGState"]` يُعيد كائن COS؛ استدعاء `ToCosPdfDictionary()` يحوله إلى قاموس قابل للتعديل يمكننا إضافة إدخالات إليه. + +## الخطوة 4: بناء قاموس حالة الرسومات بالمعلمات المطلوبة + +الآن يأتي جوهر الدرس: إنشاء **قاموس حالة الرسومات** الذي يحدد شفافية الخط (`CA`)، شفافية التعبئة (`ca`)، ووضع المزج (`BM`). هذه المفاتيح تتبع مواصفات PDF لإدخالات ExtGState. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*لماذا نضبط هذه القيم:* +- **CA** و **ca** يتيحان لك التحكم في كيفية دمج الأحبار مع خلفية الصفحة — مثالي للعلامات المائية أو الطبقات شبه الشفافة. +- **BM** (وضع المزج) يحدد كيفية دمج ألوان المصدر والوجهة؛ `"Normal"` هو الوضع الافتراضي، لكن يمكنك التحويل إلى `"Multiply"` أو `"Screen"` للحصول على تأثيرات إبداعية. + +## الخطوة 5: إدراج ExtGState الجديد في موارد الصفحة + +نُعطي حالة الرسومات الجديدة اسمًا (`GS0`) ونضعه في قاموس ExtGState الخاص بالصفحة. من الآن فصاعدًا، أي تدفق محتوى يشير إلى `/GS0` سيورث الشفافية ووضع المزج الذي عرّفناه. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*ملاحظة حالة حافة:* إذا كان `GS0` موجودًا بالفعل، سيقوم Aspose.Pdf بالكتابة فوقه. لتجنب التصادمات غير المقصودة، فكر في إنشاء اسم يعتمد على GUID مثل `"GS_" + Guid.NewGuid().ToString("N")`. + +## الخطوة 6: حفظ PDF المعدل + +أخيرًا، نكتب التغييرات مرة أخرى إلى القرص. يمكنك الكتابة فوق الملف الأصلي أو إنشاء نسخة جديدة — حسب ما يناسب سير عملك. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*ما المتوقع:* افتح `output.pdf` في أي عارض PDF. أي أوامر رسم تُشير لاحقًا إلى `GS0` ستُظهر الآن شفافية تعبئة بنسبة 50 % وشفافية خط كاملة، باستخدام وضع المزج العادي. + +--- + +## إضافي: تطبيق ExtGState الجديد في تدفق المحتوى + +إضافة قاموس ExtGState وحده لا يكفي؛ يجب إخبار تدفق محتوى PDF باستخدامه. إليك مقتطف سريع يرسم مستطيلًا شبه شفاف باستخدام الحالة التي أنشأناها للتو: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*شرح:* +- `q`/`Q` يدفعان ويُعيدان حالة الرسومات من المكدس، مما يضمن عدم تسرب تغييراتنا إلى عناصر أخرى. +- `/GS0 gs` يختار حالة الرسومات التي أضفناها. +- المشغل `re` يرسم مستطيلًا، و`B` يملأه ويُحدده باستخدام الشفافية المحددة. + +لا تتردد في تعديل إحداثيات المستطيل، الألوان، أو حتى استبدال الشكل بنص — أي أمر رسم سيحترم الآن إعدادات ExtGState. + +## الأخطاء الشائعة وكيفية تجنبها + +| Issue | Why it Happens | Fix | +|-------|----------------|-----| +| **غياب إدخال `/ExtGState`** | بعض ملفات PDF لا تُعرّف القاموس أبدًا. | تحقق من `resourcesEditor.ContainsKey("ExtGState")` قبل الوصول؛ إذا كان false، أنشئ قاموسًا فارغًا جديدًا وأضفه إلى `resourcesEditor`. | +| **الشفافية غير مطبقة** | تدفق المحتوى لا يشير أبدًا إلى الحالة الجديدة. | أدخل `/GS0 gs` قبل أي أوامر رسم تريد أن تتأثر. | +| **تجاهل وضع المزج** | العارض لا يدعم بعض أوضاع المزج. | التزم بالأوضاع المدعومة على نطاق واسع مثل `"Normal"` أو `"Multiply"` لتحقيق أقصى توافق. | +| **الصفحات المتعددة تحتاج إلى نفس الحالة** | تم تعديل الصفحة الأولى فقط. | كرّر عبر `pdfDocument.Pages` وكرر الخطوات 2‑5 لكل صفحة. | + +## مثال عملي كامل + +فيما يلي البرنامج الكامل الجاهز للنسخ واللصق والذي يدمج جميع الخطوات، معالجة الأخطاء، وعرضًا لاستخدام ExtGState الجديد. + + + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مصدر يتضمن أمثلة شفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [كيفية إضافة كائن خط في PDF باستخدام Aspose.PDF لـ .NET: دليل خطوة بخطوة](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [إضافة طوابع صور إلى ملفات PDF باستخدام Aspose.PDF لـ .NET: دليل خطوة بخطوة](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [كيفية إضافة صور إلى ملفات PDF باستخدام Aspose.PDF لـ .NET: دليل خطوة بخطوة](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/chinese/net/images-graphics/_index.md b/pdf/chinese/net/images-graphics/_index.md index d98f8fdd2d..f04cc375b2 100644 --- a/pdf/chinese/net/images-graphics/_index.md +++ b/pdf/chinese/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Aspose.PDF Net 代码教程 ### [使用 Aspose.PDF .NET 在 PDF 中绘制透明形状](./draw-transparent-shapes-aspose-pdf-net/) Aspose.PDF Net 代码教程 +### [使用 Aspose.PDF 向 PDF 添加 ExtGState:完整指南](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +了解如何使用 Aspose.PDF 在 PDF 中添加 ExtGState,以实现透明度和混合模式等高级图形效果。 + ### [使用 Aspose.PDF for .NET 实现高效的 PDF 图像识别](./master-image-identification-aspose-pdf-net/) 学习如何使用 Aspose.PDF for .NET 识别 PDF 中的灰度和 RGB 图像。本教程涵盖安装、图像提取和性能技巧。 diff --git a/pdf/chinese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/chinese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..38aa3a2846 --- /dev/null +++ b/pdf/chinese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,191 @@ +--- +category: general +date: 2026-07-07 +description: 学习如何使用 Aspose.Pdf 向 PDF 添加 ExtGState。本分步指南涵盖图形状态字典、PDF 资源编辑以及混合模式设置。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: zh +lastmod: 2026-07-07 +og_description: 使用 Aspose.Pdf 向 PDF 添加 ExtGState。按照本指南修改 PDF 资源、创建图形状态字典、设置不透明度和混合模式,并保存结果。 +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: 向 PDF 添加 ExtGState – Aspose.Pdf 步骤教程 +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: 使用 Aspose.Pdf 将 ExtGState 添加到 PDF – 完整指南 +url: /zh/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 将 ExtGState 添加到 PDF – 完整编程演练 + +是否曾经想要 **将 ExtGState 添加到 PDF**,却不确定该使用哪些 API 调用?你并不孤单。在本教程中,我们将使用 **Aspose.Pdf** 逐步演示如何修改页面资源、创建自定义 **图形状态字典**,并设置不透明度和混合模式——只需几行 C# 代码。 + +我们将从加载已有的 PDF 开始,随后深入其 **PDF 资源**,注入新的 ExtGState 条目,最后保存修改后的文档。完成后,你将拥有一个可在任何 .NET 项目中复用的代码片段,用于细粒度的图形控制。 + +## 你需要的环境 + +- .NET 6(或任意较新的 .NET Framework 版本) +- **Aspose.Pdf for .NET** NuGet 包(`Aspose.Pdf`) +- 放置在可引用文件夹中的输入 PDF(`input.pdf`) +- 对 C# 语法的基本了解(无需深入 PDF 内部结构) + +如果你已经具备以上条件,下面开始动手吧。 + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Add ExtGState to PDF using Aspose.Pdf"} + +## 步骤 1:将 ExtGState 添加到 PDF – 加载文档 + +首先要做的就是打开我们想要修改的 PDF。使用 `using` 块可以确保文件句柄在使用后自动释放,这在后续覆盖同一文件时尤为方便。 + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*为什么重要:* 加载文件后,你才能访问 `Pages` 集合,其中每页的 **PDF 资源** 都存放在那里。未打开文档就无法操作 ExtGState 字典。 + +## 步骤 2:使用 Aspose.Pdf 访问 PDF 资源 + +PDF 中的每一页都有一个 `/Resources` 字典,保存字体、图像和图形状态。我们需要获取第一页的资源,并将其包装在 `DictionaryEditor` 中,以便读取和写入条目。 + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*小技巧:* 如果你的 PDF 有多页且需要在所有页面上使用相同的 ExtGState,遍历 `pdfDocument.Pages` 并对每页重复以下步骤即可。 + +## 步骤 3:获取已有的 ExtGState 字典(或创建新字典) + +`/ExtGState` 条目可能已经存在。我们先获取它,以便在唯一键下添加新的图形状态。如果不存在,Aspose.Pdf 会抛异常,因此我们需要在必要时创建一个全新的字典。 + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*正在发生什么:* `resourcesEditor["ExtGState"]` 返回一个 COS 对象;调用 `ToCosPdfDictionary()` 将其转换为可变字典,便于追加条目。 + +## 步骤 4:构建包含所需参数的图形状态字典 + +下面进入本教程的核心:构造一个 **图形状态字典**,定义描边不透明度(`CA`)、填充不透明度(`ca`)以及混合模式(`BM`)。这些键遵循 PDF 规范中的 ExtGState 条目定义。 + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*为什么要设置这些:* +- **CA** 与 **ca** 让你控制墨水与页面背景的混合方式——非常适合水印或半透明叠加。 +- **BM**(Blend Mode)决定源颜色与目标颜色的组合方式;`"Normal"` 为默认值,你也可以切换为 `"Multiply"` 或 `"Screen"` 以实现创意效果。 + +## 步骤 5:将新 ExtGState 插入页面资源 + +我们为新图形状态起名(`GS0`),并将其放入页面的 ExtGState 字典中。从此以后,任何引用 `/GS0` 的内容流都会继承我们刚才定义的不透明度和混合模式。 + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*边缘情况说明:* 如果 `GS0` 已经存在,Aspose.Pdf 会覆盖它。为避免意外冲突,建议使用基于 GUID 的名称,例如 `"GS_" + Guid.NewGuid().ToString("N")`。 + +## 步骤 6:保存修改后的 PDF + +最后,将更改写回磁盘。你可以覆盖原文件,也可以输出一个新副本——根据你的工作流自行选择。 + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*预期结果:* 在任意 PDF 查看器中打开 `output.pdf`。随后任何引用 `GS0` 的绘图指令都会以 50 % 填充不透明度、100 % 描边不透明度以及普通混合模式渲染。 + +--- + +## 进阶:在内容流中使用新 ExtGState + +仅添加 ExtGState 字典还不够,还必须在 PDF 内容流中指明使用它。下面的代码片段演示了如何使用刚创建的状态绘制一个半透明矩形: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*解释:* +- `q`/`Q` 用于压栈和弹栈图形状态,确保我们的更改不会泄漏到其他元素。 +- `/GS0 gs` 选择我们添加的图形状态。 +- `re` 操作符绘制矩形,`B` 同时填充并描边,使用已定义的不透明度。 + +随意修改矩形坐标、颜色,甚至将形状换成文字——任何绘图指令现在都会遵循 ExtGState 设置。 + +## 常见陷阱与规避方法 + +| 问题 | 产生原因 | 解决方案 | +|------|----------|----------| +| **缺少 `/ExtGState` 条目** | 某些 PDF 从未定义该字典。 | 在访问前检查 `resourcesEditor.ContainsKey("ExtGState")`;若返回 false,则创建一个空字典并加入 `resourcesEditor`。 | +| **不透明度未生效** | 内容流未引用新状态。 | 在任何希望受影响的绘图指令前插入 `/GS0 gs`。 | +| **混合模式被忽略** | 查看器不支持某些混合模式。 | 使用广泛支持的模式,如 `"Normal"` 或 `"Multiply"`,以获得最大兼容性。 | +| **多页需要相同状态** | 只编辑了第一页。 | 遍历 `pdfDocument.Pages`,对每页重复步骤 2‑5。 | + +## 完整工作示例 + +下面是完整的、可直接复制粘贴的程序,涵盖所有步骤、错误处理以及演示如何使用新 ExtGState。 + + + +## 接下来该学习什么? + +以下教程涵盖与本指南紧密相关的主题,帮助你进一步掌握 API 功能并探索在项目中实现的其他方案。每篇资源均提供完整可运行的代码示例和逐步解释。 + +- [如何在 PDF 中使用 Aspose.PDF for .NET 添加线对象: 步骤指南](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [使用 Aspose.PDF for .NET 为 PDF 添加图像水印: 步骤指南](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [如何在 PDF 中使用 Aspose.PDF for .NET 添加图像: 步骤指南](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/czech/net/images-graphics/_index.md b/pdf/czech/net/images-graphics/_index.md index db1250553f..b25ca0696d 100644 --- a/pdf/czech/net/images-graphics/_index.md +++ b/pdf/czech/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Naučte se, jak vytvářet vizuálně přitažlivé dokumenty PDF extrakcí a zv ### [Kreslení průhledných tvarů v PDF pomocí Aspose.PDF .NET](./draw-transparent-shapes-aspose-pdf-net/) Výukový program pro kódování Aspose.PDF Net +### [Přidání ExtGState do PDF pomocí Aspose.PDF – Kompletní průvodce](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Naučte se, jak přidat ExtGState do PDF dokumentů pomocí Aspose.PDF pro .NET v tomto podrobném průvodci. + ### [Efektivní identifikace obrázků PDF s Aspose.PDF pro .NET](./master-image-identification-aspose-pdf-net/) Naučte se, jak identifikovat obrázky ve stupních šedi a RGB v PDF pomocí Aspose.PDF pro .NET. Tento tutoriál se zabývá instalací, extrakcí obrázků a tipy pro výkon. diff --git a/pdf/czech/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/czech/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..8927079ddd --- /dev/null +++ b/pdf/czech/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Naučte se, jak přidat ExtGState do PDF pomocí Aspose.Pdf. Tento krok‑za‑krokem + průvodce pokrývá slovník grafického stavu, úpravu zdrojů PDF a nastavení režimu + míchání. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: cs +lastmod: 2026-07-07 +og_description: Přidejte ExtGState do PDF pomocí Aspose.Pdf. Postupujte podle tohoto + návodu, abyste upravili zdroje PDF, vytvořili slovník grafického stavu, nastavili + průhlednost a režim prolnutí a uložili výsledek. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: Přidat ExtGState do PDF – krok za krokem tutoriál Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Přidání ExtGState do PDF pomocí Aspose.Pdf – Kompletní průvodce +url: /cs/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Přidání ExtGState do PDF – Kompletní programový průvodce + +Už jste někdy potřebovali **přidat ExtGState do PDF**, ale nebyli jste si jisti, které volání API použít? Nejste v tom sami. V tomto tutoriálu projdeme přesně kroky pomocí **Aspose.Pdf**, jak upravit zdroje stránky, vytvořit vlastní **graphics state dictionary** a nastavit průhlednost a režim míchání – vše během několika řádků C#. + +Začneme načtením existujícího PDF, poté se ponoříme do jeho **PDF resources**, vložíme nový záznam ExtGState a nakonec uložíme upravený dokument. Na konci budete mít znovupoužitelný úryvek, který můžete vložit do libovolného .NET projektu, který potřebuje jemnou kontrolu grafiky. + +## Co budete potřebovat + +- .NET 6 (nebo jakákoli recentní verze .NET Framework) +- NuGet balíček **Aspose.Pdf for .NET** (`Aspose.Pdf`) +- Vstupní PDF (`input.pdf`) umístěné ve složce, na kterou můžete odkazovat +- Základní znalost syntaxe C# (nejsou potřeba hluboké znalosti interní struktury PDF) + +Pokud to máte, pojďme na to. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Přidání ExtGState do PDF pomocí Aspose.Pdf"} + +## Krok 1: Přidání ExtGState do PDF – Načtení dokumentu + +Prvním krokem je otevřít PDF, které chceme upravit. Použití bloku `using` zajišťuje automatické uvolnění souborového handle, což je zvláště užitečné, když později přepíšete stejný soubor. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Proč je to důležité:* Načtení souboru vám poskytuje přístup ke kolekci `Pages`, kde se nacházejí **PDF resources** každé stránky. Bez otevření dokumentu nemůžete upravit slovník ExtGState. + +## Krok 2: Přístup k PDF Resources pomocí Aspose.Pdf + +Každá stránka v PDF má slovník `/Resources`, který obsahuje písma, obrázky a grafické stavy. Musíme získat zdroje první stránky a zabalit je do `DictionaryEditor`, abychom mohli číst a zapisovat položky. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Tip:* Pokud má vaše PDF více stránek a potřebujete stejný ExtGState na všech, projděte `pdfDocument.Pages` v cyklu a opakujte následující kroky pro každou stránku. + +## Krok 3: Získání existujícího slovníku ExtGState (nebo vytvoření nového) + +Záznam `/ExtGState` může již existovat. Načteme jej, abychom mohli přidat náš nový grafický stav pod unikátní klíč. Pokud neexistuje, Aspose.Pdf vyhodí výjimku, proto to ošetříme vytvořením nového slovníku, pokud je potřeba. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Co se děje:* `resourcesEditor["ExtGState"]` vrací COS objekt; volání `ToCosPdfDictionary()` jej převádí na editovatelný slovník, do kterého můžeme přidávat položky. + +## Krok 4: Vytvoření Graphics‑State slovníku s požadovanými parametry + +Nyní přichází jádro tutoriálu: vytvoření **graphics state dictionary**, který definuje průhlednost tahu (`CA`), průhlednost výplně (`ca`) a režim míchání (`BM`). Tyto klíče odpovídají specifikaci PDF pro záznamy ExtGState. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Proč to nastavujeme:* +- **CA** a **ca** vám umožňují řídit, jak se inkousty míchají s pozadím stránky – ideální pro vodoznaky nebo poloprůhledné překryvy. +- **BM** (Blend Mode) určuje, jak se kombinují barvy zdroje a cíle; `"Normal"` je výchozí, ale můžete přepnout na `"Multiply"` nebo `"Screen"` pro kreativní efekty. + +## Krok 5: Vložení nového ExtGState do zdrojů stránky + +Novému grafickému stavu přiřadíme název (`GS0`) a vložíme jej do slovníku ExtGState stránky. Od teď bude jakýkoli obsahový proud, který odkazuje na `/GS0`, dědit průhlednost a režim míchání, které jsme právě definovali. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Poznámka k okrajovým případům:* Pokud `GS0` již existuje, Aspose.Pdf jej přepíše. Aby se předešlo nechtěným kolizím, zvažte generování názvu založeného na GUID, např. `"GS_" + Guid.NewGuid().ToString("N")`. + +## Krok 6: Uložení upraveného PDF + +Nakonec zapíšeme změny zpět na disk. Můžete přepsat původní soubor nebo vytvořit novou kopii – podle toho, co vám vyhovuje. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Co očekávat:* Otevřete `output.pdf` v libovolném PDF prohlížeči. Jakékoli kreslicí příkazy, které později odkazují na `GS0`, se nyní vykreslí s 50 % průhledností výplně a plnou průhledností tahu, s použitím normálního režimu míchání. + +--- + +## Bonus: Použití nového ExtGState v obsahovém proudu + +Pouze přidání slovníku ExtGState nestačí; musíte PDF obsahovému proudu říct, aby jej použil. Zde je rychlý úryvek, který kreslí poloprůhledný obdélník pomocí právě vytvořeného stavu: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Vysvětlení:* +- `q`/`Q` vloží a odebere stav grafiky ze zásobníku, čímž zajistí, že naše změny nebudou unikat do ostatních prvků. +- `/GS0 gs` vybere grafický stav, který jsme přidali. +- Operátor `re` kreslí obdélník a `B` jej vyplní a obtáhne s použitím definované průhlednosti. + +Neváhejte upravit souřadnice obdélníku, barvy nebo dokonce nahradit tvar textem – jakýkoli kreslicí příkaz nyní bude respektovat nastavení ExtGState. + +## Časté úskalí a jak se jim vyhnout + +| Problém | Proč k tomu dochází | Řešení | +|-------|----------------|-----| +| **Chybějící záznam `/ExtGState`** | Některé PDF nikdy nedefinují tento slovník. | Zkontrolujte `resourcesEditor.ContainsKey("ExtGState")` před přístupem; pokud je false, vytvořte nový prázdný slovník a přidejte jej do `resourcesEditor`. | +| **Průhlednost není aplikována** | Obsahový proud nikdy neodkazuje na nový stav. | Vložte `/GS0 gs` před jakékoli kreslicí příkazy, na které chcete mít vliv. | +| **Blend mode ignorován** | Prohlížeč nepodporuje některé režimy míchání. | Používejte široce podporované režimy jako `"Normal"` nebo `"Multiply"` pro maximální kompatibilitu. | +| **Více stránek potřebuje stejný stav** | Byla upravena pouze první stránka. | Projděte `pdfDocument.Pages` v cyklu a opakujte kroky 2‑5 pro každou stránku. | + +## Kompletní funkční příklad + +Níže je kompletní program připravený ke zkopírování, který zahrnuje všechny kroky, ošetření chyb a ukázku použití nového ExtGState. + + + +## 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. + +- [Jak přidat Line objekt do PDF pomocí Aspose.PDF pro .NET: Průvodce krok za krokem](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Přidání obrázkových razítek do PDF pomocí Aspose.PDF pro .NET: Průvodce krok za krokem](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Jak přidat obrázky do PDF pomocí Aspose.PDF pro .NET: Průvodce krok za krokem](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/dutch/net/images-graphics/_index.md b/pdf/dutch/net/images-graphics/_index.md index fd8b6acd20..ca796d6eeb 100644 --- a/pdf/dutch/net/images-graphics/_index.md +++ b/pdf/dutch/net/images-graphics/_index.md @@ -164,6 +164,9 @@ Leer hoe u complexe LaTeX-scripts kunt omzetten in PDF-documenten met Aspose.PDF ### [Afbeeldingsachtergronden instellen in PDF's met Aspose.PDF voor .NET: een uitgebreide handleiding](./aspose-pdf-net-set-image-backgrounds/) Leer hoe u uw PDF-documenten kunt verbeteren door afbeeldingsachtergronden in te stellen met Aspose.PDF voor .NET. Deze handleiding behandelt tips voor installatie, implementatie en optimalisatie. +### [ExtGState toevoegen aan PDF met Aspose.Pdf – een volledige handleiding](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Leer hoe u ExtGState-objecten kunt toepassen om transparantie, mengmodi en andere grafische instellingen in PDF's te beheren met Aspose.Pdf. + ## Aanvullende bronnen - [Aspose.PDF voor Netdocumentatie](https://docs.aspose.com/pdf/net/) diff --git a/pdf/dutch/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/dutch/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..0b9db4bd65 --- /dev/null +++ b/pdf/dutch/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Leer hoe u ExtGState aan een PDF kunt toevoegen met Aspose.Pdf. Deze + stapsgewijze gids behandelt de graphics state dictionary, het bewerken van PDF‑resources + en de instellingen voor blend‑mode. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: nl +lastmod: 2026-07-07 +og_description: Voeg ExtGState toe aan PDF met Aspose.Pdf. Volg deze gids om de PDF‑resources + te wijzigen, een grafische toestandsdictionary te maken, de doorzichtigheid en mengmodus + in te stellen, en het resultaat op te slaan. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: ExtGState toevoegen aan PDF – Aspose.Pdf stap‑voor‑stap tutorial +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: ExtGState toevoegen aan PDF met Aspose.Pdf – Complete gids +url: /nl/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# ExtGState toevoegen aan PDF – Complete programmeerhandleiding + +Heb je ooit **ExtGState aan een PDF** moeten toevoegen, maar wist je niet welke API‑aanroepen je moest gebruiken? Je bent niet de enige. In deze tutorial lopen we de exacte stappen door met **Aspose.Pdf** om de paginabronnen aan te passen, een aangepast **graphics state dictionary** te maken en de opacity en blend‑mode in te stellen — allemaal in slechts een paar regels C#. + +We beginnen met het laden van een bestaande PDF, duiken vervolgens in de **PDF‑resources**, voegen een nieuw ExtGState‑item toe en slaan uiteindelijk het gewijzigde document op. Aan het einde heb je een herbruikbare code‑fragment die je in elk .NET‑project kunt plaatsen dat fijnmazige grafische controle nodig heeft. + +## Wat je nodig hebt + +- .NET 6 (of een recente .NET Framework‑versie) +- Het **Aspose.Pdf for .NET** NuGet‑pakket (`Aspose.Pdf`) +- Een invoer‑PDF (`input.pdf`) geplaatst in een map die je kunt refereren +- Een basisbegrip van C#‑syntaxis (geen diepgaande PDF‑internals vereist) + +Als je dat hebt, laten we dan aan de slag gaan. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="ExtGState toevoegen aan PDF met Aspose.Pdf"} + +## Stap 1: ExtGState toevoegen aan PDF – Document laden + +Het eerste wat we moeten doen is de PDF die we willen aanpassen openen. Het gebruik van een `using`‑block zorgt ervoor dat de bestands­handle automatisch wordt vrijgegeven, wat vooral handig is wanneer je later hetzelfde bestand overschrijft. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Waarom dit belangrijk is:* Het laden van het bestand geeft je toegang tot de `Pages`‑collectie, waar de **PDF‑resources** van elke pagina zich bevinden. Zonder het document te openen kun je het ExtGState‑dictionary niet aanpassen. + +## Stap 2: PDF‑resources benaderen met Aspose.Pdf + +Elke pagina in een PDF heeft een `/Resources`‑dictionary die lettertypen, afbeeldingen en graphics‑states bevat. We moeten de resources van de eerste pagina ophalen en ze in een `DictionaryEditor` plaatsen zodat we items kunnen lezen en schrijven. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Pro tip:* Als je PDF meerdere pagina’s heeft en je dezelfde ExtGState op al deze pagina’s nodig hebt, loop dan over `pdfDocument.Pages` en herhaal de volgende stappen voor elke pagina. + +## Stap 3: Bestaand ExtGState‑dictionary ophalen (of een nieuw maken) + +Het `/ExtGState`‑item kan al bestaan. We halen het op zodat we onze nieuwe graphics‑state onder een unieke sleutel kunnen toevoegen. Als het niet bestaat, zal Aspose.Pdf een fout geven, dus we voorkomen dat door een nieuw dictionary aan te maken wanneer dat nodig is. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Wat er gebeurt:* `resourcesEditor["ExtGState"]` retourneert een COS‑object; door `ToCosPdfDictionary()` aan te roepen wordt het omgezet naar een bewerkbaar dictionary waarin we items kunnen toevoegen. + +## Stap 4: Een graphics‑state‑dictionary bouwen met gewenste parameters + +Nu volgt het hart van de tutorial: het construeren van een **graphics state dictionary** dat de lijn‑opacity (`CA`), vul‑opacity (`ca`) en blend‑mode (`BM`) definieert. Deze sleutels volgen de PDF‑specificatie voor ExtGState‑items. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Waarom we deze instellen:* +- **CA** en **ca** laten je controleren hoe inkt zich mengt met de paginabackground — perfect voor watermerken of semi‑transparante overlays. +- **BM** (Blend Mode) bepaalt hoe bron‑ en bestemmingskleuren combineren; `"Normal"` is de standaard, maar je kunt overschakelen naar `"Multiply"` of `"Screen"` voor creatieve effecten. + +## Stap 5: Het nieuwe ExtGState in de paginabronnen invoegen + +We geven onze nieuwe graphics‑state een naam (`GS0`) en plaatsen deze in het ExtGState‑dictionary van de pagina. Vanaf nu zal elke content‑stream die `/GS0` aanroept, de door ons gedefinieerde opacity en blend‑mode overnemen. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Opmerking voor randgevallen:* Als `GS0` al bestaat, zal Aspose.Pdf het overschrijven. Om onbedoelde botsingen te voorkomen, overweeg een op GUID gebaseerde naam te genereren, zoals `"GS_" + Guid.NewGuid().ToString("N")`. + +## Stap 6: Het gewijzigde PDF opslaan + +Tot slot schrijven we de wijzigingen terug naar de schijf. Je kunt het oorspronkelijke bestand overschrijven of een nieuwe kopie maken — wat het beste bij je workflow past. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Wat je kunt verwachten:* Open `output.pdf` in een PDF‑viewer. Alle teken‑commando’s die later `GS0` aanroepen, zullen nu renderen met 50 % vul‑opacity en volledige lijn‑opacity, met de normale blend‑mode. + +--- + +## Bonus: Het nieuwe ExtGState toepassen in een content‑stream + +Alleen het ExtGState‑dictionary toevoegen is niet voldoende; je moet de PDF‑content‑stream laten weten dat deze het moet gebruiken. Hier is een kort fragment dat een semi‑transparante rechthoek tekent met de state die we zojuist hebben gemaakt: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Uitleg:* +- `q`/`Q` duwen en poppen de graphics‑state‑stack, waardoor onze wijzigingen niet lekken naar andere elementen. +- `/GS0 gs` selecteert de graphics‑state die we hebben toegevoegd. +- De `re`‑operator tekent een rechthoek, en `B` vult en strookt deze met de gedefinieerde opacity. + +Voel je vrij om de coördinaten, kleuren van de rechthoek aan te passen, of zelfs de vorm te vervangen door tekst — elk teken‑commando zal nu de ExtGState‑instellingen respecteren. + +## Veelvoorkomende valkuilen & hoe ze te vermijden + +| Issue | Why it Happens | Fix | +|-------|----------------|-----| +| **Ontbrekende `/ExtGState`‑entry** | Sommige PDF's definiëren het dictionary nooit. | Controleer `resourcesEditor.ContainsKey("ExtGState")` voordat je toegang krijgt; als false, maak een nieuw leeg dictionary aan en voeg het toe aan `resourcesEditor`. | +| **Opacity niet toegepast** | Content‑stream verwijst nooit naar de nieuwe state. | Voeg `/GS0 gs` in vóór alle teken‑commando’s die je wilt beïnvloeden. | +| **Blend‑mode genegeerd** | Viewer ondersteunt bepaalde blend‑modes niet. | Houd je aan breed ondersteunde modes zoals `"Normal"` of `"Multiply"` voor maximale compatibiliteit. | +| **Meerdere pagina’s hebben dezelfde state nodig** | Alleen de eerste pagina was bewerkt. | Loop over `pdfDocument.Pages` en herhaal stappen 2‑5 voor elke pagina. | + +## Volledig werkend voorbeeld + +Hieronder staat het volledige, kant‑klaar te kopiëren programma dat alle stappen, foutafhandeling en een demonstratie van het gebruik van de nieuwe ExtGState bevat: + + + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden getoond. Elke bron bevat volledige werkende code‑voorbeelden met stap‑voor‑stap uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [Hoe een lijnobject toe te voegen aan PDF met Aspose.PDF voor .NET: Een stapsgewijze handleiding](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Afbeeldingsstempels toevoegen aan PDF's met Aspose.PDF voor .NET: Een stapsgewijze handleiding](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Hoe afbeeldingen toe te voegen aan PDF's met Aspose.PDF voor .NET: Een stapsgewijze handleiding](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/images-graphics/_index.md b/pdf/english/net/images-graphics/_index.md index 22270e8057..100f2bf974 100644 --- a/pdf/english/net/images-graphics/_index.md +++ b/pdf/english/net/images-graphics/_index.md @@ -104,6 +104,9 @@ Learn how to create accessible tagged PDFs embedded with images using Aspose.PDF ### [How to Create Transparent Rectangles in PDFs Using Aspose.PDF for .NET](./create-transparent-rectangles-aspose-pdf-dotnet/) Learn how to enhance your PDF documents by creating rectangles with alpha transparency using Aspose.PDF for .NET. Follow this step-by-step guide. +### [Add ExtGState to PDF with Aspose.Pdf – Complete Guide](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Learn how to add ExtGState objects to PDFs using Aspose.PDF for .NET to control transparency, blending, and other graphics state parameters. + ### [How to Delete Images from PDF Files Using Aspose.PDF for .NET - Complete Guide](./delete-images-aspose-pdf-net/) Learn how to efficiently delete images from PDF files using Aspose.PDF for .NET. This guide covers setup, code examples, and best practices. @@ -178,4 +181,4 @@ Learn how to enhance your PDF documents by setting image backgrounds using Aspos {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/english/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..c5ae249815 --- /dev/null +++ b/pdf/english/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,209 @@ +--- +category: general +date: 2026-07-07 +description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode settings. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: en +lastmod: 2026-07-07 +og_description: Add ExtGState to PDF using Aspose.Pdf. Follow this guide to modify + the PDF resources, create a graphics state dictionary, set opacity and blend mode, + and save the result. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: Add ExtGState to PDF – Aspose.Pdf Step-by-Step Tutorial +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Add ExtGState to PDF with Aspose.Pdf – Complete Guide +url: /net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Add ExtGState to PDF – Complete Programming Walkthrough + +Ever needed to **add ExtGState to PDF** but weren't sure which API calls to use? You're not alone. In this tutorial we’ll walk through the exact steps using **Aspose.Pdf** to tweak the page resources, create a custom **graphics state dictionary**, and set opacity and blend mode—all in just a few lines of C#. + +We’ll start by loading an existing PDF, then dive into its **PDF resources**, inject a new ExtGState entry, and finally save the modified document. By the end you’ll have a reusable snippet you can drop into any .NET project that needs fine‑grained graphics control. + +## What You’ll Need + +- .NET 6 (or any recent .NET Framework version) +- The **Aspose.Pdf for .NET** NuGet package (`Aspose.Pdf`) +- An input PDF (`input.pdf`) placed in a folder you can reference +- A basic understanding of C# syntax (no deep PDF internals required) + +If you’ve got those, let’s get cracking. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Add ExtGState to PDF using Aspose.Pdf"} + +## Step 1: Add ExtGState to PDF – Load the Document + +The first thing we have to do is open the PDF we want to modify. Using a `using` block ensures the file handle is released automatically, which is especially handy when you later overwrite the same file. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Why this matters:* Loading the file gives you access to the `Pages` collection, where each page’s **PDF resources** live. Without opening the document you can’t touch the ExtGState dictionary. + +## Step 2: Access PDF Resources with Aspose.Pdf + +Every page in a PDF has a `/Resources` dictionary that holds fonts, images, and graphics states. We need to grab the first page’s resources and wrap them in a `DictionaryEditor` so we can read and write entries. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Pro tip:* If your PDF has multiple pages and you need the same ExtGState on all of them, loop over `pdfDocument.Pages` and repeat the following steps for each page. + +## Step 3: Retrieve Existing ExtGState Dictionary (or Create One) + +The `/ExtGState` entry may already exist. We fetch it so we can add our new graphics state under a unique key. If it doesn’t exist, Aspose.Pdf will throw, so we guard against that by creating a fresh dictionary when needed. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*What’s happening:* `resourcesEditor["ExtGState"]` returns a COS object; calling `ToCosPdfDictionary()` converts it into a mutable dictionary we can append entries to. + +## Step 4: Build a Graphics‑State Dictionary with Desired Parameters + +Now comes the heart of the tutorial: constructing a **graphics state dictionary** that defines stroke opacity (`CA`), fill opacity (`ca`), and blend mode (`BM`). These keys follow the PDF specification for ExtGState entries. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Why we set these:* +- **CA** and **ca** let you control how inks blend with the page background—perfect for watermarking or semi‑transparent overlays. +- **BM** (Blend Mode) determines how source and destination colors combine; `"Normal"` is the default, but you could switch to `"Multiply"` or `"Screen"` for creative effects. + +## Step 5: Insert the New ExtGState into the Page Resources + +We give our new graphics state a name (`GS0`) and stick it into the page’s ExtGState dictionary. From now on, any content stream that references `/GS0` will inherit the opacity and blend mode we just defined. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Edge case note:* If `GS0` already exists, Aspose.Pdf will overwrite it. To avoid accidental collisions, consider generating a GUID‑based name like `"GS_" + Guid.NewGuid().ToString("N")`. + +## Step 6: Save the Modified PDF + +Finally, we write the changes back to disk. You can overwrite the original file or output a fresh copy—whatever fits your workflow. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*What to expect:* Open `output.pdf` in any PDF viewer. Any drawing commands that later reference `GS0` will now render with 50 % fill opacity and full stroke opacity, using the normal blend mode. + +--- + +## Bonus: Applying the New ExtGState in a Content Stream + +Adding the ExtGState dictionary alone isn’t enough; you must tell the PDF content stream to use it. Here’s a quick snippet that draws a semi‑transparent rectangle using the state we just created: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Explanation:* +- `q`/`Q` push and pop the graphics state stack, ensuring our changes don’t leak to other elements. +- `/GS0 gs` selects the graphics state we added. +- The `re` operator draws a rectangle, and `B` fills and strokes it using the defined opacity. + +Feel free to tweak the rectangle coordinates, colors, or even replace the shape with text—any drawing command will now respect the ExtGState settings. + +## Common Pitfalls & How to Avoid Them + +| Issue | Why it Happens | Fix | +|-------|----------------|-----| +| **Missing `/ExtGState` entry** | Some PDFs never define the dictionary. | Check `resourcesEditor.ContainsKey("ExtGState")` before accessing; if false, create a new empty dictionary and add it to `resourcesEditor`. | +| **Opacity not applied** | Content stream never references the new state. | Insert `/GS0 gs` before any drawing commands you want affected. | +| **Blend mode ignored** | Viewer doesn’t support certain blend modes. | Stick to widely supported modes like `"Normal"` or `"Multiply"` for maximum compatibility. | +| **Multiple pages need the same state** | Only the first page was edited. | Loop over `pdfDocument.Pages` and repeat steps 2‑5 for each page. | + +## Full Working Example + +Below is the complete, copy‑paste‑ready program that incorporates all the steps, error handling, and a demonstration of using the new ExtGState. + +```csharp +using System; +using System.Collections.Generic; +using Aspose.Pdf; + +class AddExtGStateDemo +{ + static void Main() + { + const string inputPath = "YOUR_DIRECTORY/input.pdf"; + const string outputPath = "YOUR_DIRECTORY/output.pdf"; + + // Load the PDF + using (var pdfDocument = new Document(inputPath)) + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [How to Add a Line Object in PDF Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [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 Images to PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/og-image.png b/pdf/english/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..6a2467bf5113942ba4c9e10d0d5d24d481999664 GIT binary patch literal 51563 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 VtzLZ?1lD*;NkQ#NiTo?y{{gvI9cBOk literal 0 HcmV?d00001 diff --git a/pdf/french/net/images-graphics/_index.md b/pdf/french/net/images-graphics/_index.md index 6bd4dee5cf..4c92ae31f2 100644 --- a/pdf/french/net/images-graphics/_index.md +++ b/pdf/french/net/images-graphics/_index.md @@ -164,6 +164,9 @@ Découvrez comment restituer des scripts LaTeX complexes dans des documents PDF ### [Définir l'arrière-plan des images dans les fichiers PDF avec Aspose.PDF pour .NET : guide complet](./aspose-pdf-net-set-image-backgrounds/) Découvrez comment améliorer vos documents PDF en définissant des images d'arrière-plan avec Aspose.PDF pour .NET. Ce guide présente des conseils de configuration, de mise en œuvre et d'optimisation. +### [Ajouter ExtGState à un PDF avec Aspose.PDF – guide complet](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Apprenez à appliquer des états graphiques avancés (ExtGState) aux PDF avec Aspose.PDF pour .NET, incluant la transparence et les effets. + ## Ressources supplémentaires - [Aspose.PDF pour la documentation réseau](https://docs.aspose.com/pdf/net/) diff --git a/pdf/french/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/french/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..dfc8207579 --- /dev/null +++ b/pdf/french/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Apprenez comment ajouter ExtGState à un PDF en utilisant Aspose.Pdf. + Ce guide étape par étape couvre le dictionnaire d’état graphique, l’édition des + ressources PDF et les paramètres du mode de fusion. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: fr +lastmod: 2026-07-07 +og_description: Ajoutez ExtGState au PDF avec Aspose.Pdf. Suivez ce guide pour modifier + les ressources du PDF, créer un dictionnaire d’état graphique, définir l’opacité + et le mode de fusion, puis enregistrer le résultat. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: Ajouter ExtGState au PDF – Tutoriel pas à pas Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Ajouter ExtGState à un PDF avec Aspose.Pdf – Guide complet +url: /fr/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Ajouter ExtGState à PDF – Guide complet de programmation + +Vous avez déjà eu besoin d'**ajouter ExtGState à PDF** sans savoir quelles appels d'API utiliser ? Vous n'êtes pas seul. Dans ce tutoriel, nous passerons en revue les étapes exactes avec **Aspose.Pdf** pour modifier les ressources de la page, créer un **dictionnaire d’état graphique** personnalisé, et définir l’opacité ainsi que le mode de fusion—le tout en quelques lignes de C#. + +Nous commencerons par charger un PDF existant, puis nous plongerons dans ses **ressources PDF**, injecterons une nouvelle entrée ExtGState, et enfin enregistrerons le document modifié. À la fin, vous disposerez d’un extrait réutilisable à intégrer dans n’importe quel projet .NET nécessitant un contrôle graphique fin. + +## Ce dont vous aurez besoin + +- .NET 6 (ou toute version récente du .NET Framework) +- Le package NuGet **Aspose.Pdf for .NET** (`Aspose.Pdf`) +- Un PDF d'entrée (`input.pdf`) placé dans un dossier que vous pouvez référencer +- Une compréhension de base de la syntaxe C# (pas besoin de connaître les internals PDF) + +Si vous avez tout cela, c’est parti. + +![Ajouter ExtGState à PDF avec Aspose.Pdf](placeholder.png){alt="Ajouter ExtGState à PDF avec Aspose.Pdf"} + +## Étape 1 : Ajouter ExtGState à PDF – Charger le document + +La première chose à faire est d'ouvrir le PDF que nous voulons modifier. Utiliser un bloc `using` garantit que le handle du fichier est libéré automatiquement, ce qui est particulièrement pratique lorsque vous écrasez plus tard le même fichier. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Pourquoi c’est important :* Charger le fichier vous donne accès à la collection `Pages`, où résident les **ressources PDF** de chaque page. Sans ouvrir le document, vous ne pouvez pas toucher au dictionnaire ExtGState. + +## Étape 2 : Accéder aux ressources PDF avec Aspose.Pdf + +Chaque page d’un PDF possède un dictionnaire `/Resources` qui contient les polices, images et états graphiques. Nous devons récupérer les ressources de la première page et les envelopper dans un `DictionaryEditor` afin de pouvoir lire et écrire des entrées. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Astuce :* Si votre PDF comporte plusieurs pages et que vous avez besoin du même ExtGState sur toutes, bouclez sur `pdfDocument.Pages` et répétez les étapes suivantes pour chaque page. + +## Étape 3 : Récupérer le dictionnaire ExtGState existant (ou en créer un) + +L’entrée `/ExtGState` peut déjà exister. Nous la récupérons afin d’ajouter notre nouvel état graphique sous une clé unique. Si elle n’existe pas, Aspose.Pdf lèvera une exception, nous nous en prémunissons en créant un nouveau dictionnaire lorsqu’il est nécessaire. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Ce qui se passe :* `resourcesEditor["ExtGState"]` renvoie un objet COS ; appeler `ToCosPdfDictionary()` le convertit en un dictionnaire mutable auquel nous pouvons ajouter des entrées. + +## Étape 4 : Construire un dictionnaire d’état graphique avec les paramètres souhaités + +Voici le cœur du tutoriel : créer un **dictionnaire d’état graphique** qui définit l’opacité du trait (`CA`), l’opacité du remplissage (`ca`) et le mode de fusion (`BM`). Ces clés suivent la spécification PDF pour les entrées ExtGState. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Pourquoi nous définissons cela :* +- **CA** et **ca** vous permettent de contrôler la façon dont les encres se mélangent avec le fond de la page—idéal pour les filigranes ou les superpositions semi‑transparentes. +- **BM** (Blend Mode) détermine comment les couleurs source et destination se combinent ; `"Normal"` est la valeur par défaut, mais vous pouvez passer à `"Multiply"` ou `"Screen"` pour des effets créatifs. + +## Étape 5 : Insérer le nouvel ExtGState dans les ressources de la page + +Nous attribuons à notre nouvel état graphique le nom (`GS0`) et l’insérons dans le dictionnaire ExtGState de la page. Désormais, tout flux de contenu qui fait référence à `/GS0` héritera de l’opacité et du mode de fusion que nous venons de définir. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Note de cas particulier :* Si `GS0` existe déjà, Aspose.Pdf l’écrasera. Pour éviter les collisions accidentelles, envisagez de générer un nom basé sur un GUID comme `"GS_" + Guid.NewGuid().ToString("N")`. + +## Étape 6 : Enregistrer le PDF modifié + +Enfin, nous écrivons les modifications sur le disque. Vous pouvez écraser le fichier original ou créer une nouvelle copie — selon votre flux de travail. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*À quoi s’attendre :* Ouvrez `output.pdf` dans n’importe quel lecteur PDF. Toutes les commandes de dessin qui référencent ensuite `GS0` seront rendues avec 50 % d’opacité de remplissage et une opacité de trait pleine, en utilisant le mode de fusion normal. + +--- + +## Bonus : Appliquer le nouvel ExtGState dans un flux de contenu + +Ajouter uniquement le dictionnaire ExtGState ne suffit pas ; il faut indiquer au flux de contenu PDF de l’utiliser. Voici un extrait rapide qui dessine un rectangle semi‑transparent en utilisant l’état que nous venons de créer : + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Explication :* +- `q`/`Q` poussent et dépilent la pile d’état graphique, garantissant que nos changements ne débordent pas sur d’autres éléments. +- `/GS0 gs` sélectionne l’état graphique que nous avons ajouté. +- L’opérateur `re` dessine un rectangle, et `B` le remplit et le trace en utilisant l’opacité définie. + +N’hésitez pas à modifier les coordonnées du rectangle, les couleurs, ou même à remplacer la forme par du texte — toute commande de dessin respectera désormais les paramètres ExtGState. + +## Problèmes courants et comment les éviter + +| Problème | Pourquoi cela se produit | Solution | +|----------|--------------------------|----------| +| **Entrée `/ExtGState` manquante** | Certains PDF ne définissent jamais le dictionnaire. | Vérifiez `resourcesEditor.ContainsKey("ExtGState")` avant d'accéder ; si false, créez un nouveau dictionnaire vide et ajoutez‑le à `resourcesEditor`. | +| **Opacité non appliquée** | Le flux de contenu ne fait jamais référence au nouvel état. | Insérez `/GS0 gs` avant toute commande de dessin que vous souhaitez affecter. | +| **Mode de fusion ignoré** | Le visualiseur ne prend pas en charge certains modes de fusion. | Utilisez des modes largement supportés comme `"Normal"` ou `"Multiply"` pour une compatibilité maximale. | +| **Plusieurs pages nécessitent le même état** | Seule la première page a été modifiée. | Bouclez sur `pdfDocument.Pages` et répétez les étapes 2‑5 pour chaque page. | + +## Exemple complet fonctionnel + +Below is the complete, copy‑paste‑ready program that incorporates all the steps, error handling, and a demonstration of using the new ExtGState. + + + +## Que devriez‑vous apprendre ensuite ? + +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. + +- [Comment ajouter un objet ligne dans un PDF avec Aspose.PDF pour .NET : guide étape par étape](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Ajouter des tampons d'image aux PDF avec Aspose.PDF pour .NET : guide étape par étape](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Comment ajouter des images aux PDF avec Aspose.PDF pour .NET : guide étape par étape](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/german/net/images-graphics/_index.md b/pdf/german/net/images-graphics/_index.md index a81c64547e..a76e1115ee 100644 --- a/pdf/german/net/images-graphics/_index.md +++ b/pdf/german/net/images-graphics/_index.md @@ -59,7 +59,7 @@ Ein Code-Tutorial für Aspose.PDF Net ### [Extrahieren Sie Bilder aus PDF-Signaturen mit Aspose.PDF .NET: Ein umfassender Leitfaden](./extract-images-pdf-signatures-aspose-pdf-dotnet/) Erfahren Sie, wie Sie mit Aspose.PDF für .NET in PDF-Signaturen eingebettete Bilder extrahieren. Diese Anleitung bietet Schritt-für-Schritt-Anleitungen und praktische Anwendungen. -### [Extrahieren Sie Bilder aus PDF mit Aspose.PDF für .NET](./extract-images-pdfs-aspose-pdf-net/) +### [Extrahieren Sie Bilder aus PDF mit Aspose.PDF .NET](./extract-images-pdfs-aspose-pdf-net/) Ein Code-Tutorial für Aspose.PDF Net ### [Schnelle Bildverkleinerung in PDFs mit Aspose.PDF .NET: Bilder effizient optimieren und komprimieren](./optimize-pdf-images-aspose-net-fast-compression/) @@ -77,19 +77,19 @@ Erfahren Sie, wie Sie mit Aspose.PDF für .NET nahtlos Bilder zu Ihren PDF-Dokum ### [So fügen Sie mit Aspose.PDF für .NET Bilder zu PDFs hinzu: Eine vollständige Anleitung](./add-images-to-pdfs-using-aspose-pdf-net/) Erfahren Sie, wie Sie mit Aspose.PDF für .NET nahtlos Bilder zu Ihren PDF-Dokumenten hinzufügen. Diese Schritt-für-Schritt-Anleitung behandelt Einrichtung, Implementierung und praktische Anwendungen. -### [So fügen Sie mit Aspose.PDF für .NET Bilder zu PDFs hinzu: Eine Schritt-für-Schritt-Anleitung](./add-images-to-pdfs-aspose-pdf-net/) +### [So fügen Sie mit Aspose.PDF für .NET Bilder zu PDFs hinzufügen: Eine Schritt-für-Schritt-Anleitung](./add-images-to-pdfs-aspose-pdf-net/) Erfahren Sie, wie Sie mit Aspose.PDF für .NET nahtlos Bilder zu Ihren PDFs hinzufügen. Diese Anleitung beschreibt das Hinzufügen von Bildern zu vorhandenen PDFs und das Erstellen neuer Bilder aus DICOM-Dateien. -### [So fügen Sie mit Aspose.PDF für .NET einen Bildkopf zu PDFs hinzu: Eine Schritt-für-Schritt-Anleitung](./add-image-header-pdf-aspose-dotnet/) +### [So fügen Sie mit Aspose.PDF für .NET einen Bildkopf zu PDFs hinzufügen: Eine Schritt-für-Schritt-Anleitung](./add-image-header-pdf-aspose-dotnet/) Erfahren Sie in dieser umfassenden Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.PDF für .NET Bildkopfzeilen zu Ihren PDF-Dokumenten hinzufügen. -### [So fügen Sie mit Aspose.PDF für .NET einen Bildstempel zu PDF-Kopfzeilen hinzu](./add-image-stamp-pdf-header-aspose-pdf/) +### [So fügen Sie mit Aspose.PDF für .NET einen Bildstempel zu PDF-Kopfzeilen hinzufügen](./add-image-stamp-pdf-header-aspose-pdf/) Erfahren Sie, wie Sie mit Aspose.PDF für .NET Bildstempel zu Ihren PDF-Kopfzeilen hinzufügen und so Ihr Branding und Ihre Professionalität verbessern. ### [So fügen Sie PDF-Seiten mit Aspose.PDF für .NET einen Bildstempel hinzu](./add-image-stamp-pdf-pages-aspose-dotnet/) Erfahren Sie, wie Sie mit Aspose.PDF für .NET Bildstempel zu bestimmten Seiten Ihrer PDF-Dateien hinzufügen. Verbessern Sie Ihr Branding, fügen Sie Wasserzeichen hinzu oder personalisieren Sie Dokumente effizient. -### [So fügen Sie mit Aspose.PDF für .NET einem PDF einen Bildstempel hinzu: Eine umfassende Anleitung](./add-image-stamp-pdf-aspose-dotnet/) +### [So fügen Sie mit Aspose.PDF für .NET einem PDF einen Bildstempel hinzufügen: Eine umfassende Anleitung](./add-image-stamp-pdf-aspose-dotnet/) Erfahren Sie, wie Sie mit Aspose.PDF für .NET Bildstempel wie Logos oder Wasserzeichen zu Ihren PDFs hinzufügen. Diese Anleitung behandelt Einrichtung, Implementierung und praktische Anwendungen. ### [So konvertieren Sie PDF-Seiten mit Aspose.PDF für .NET in PNG-Bilder](./convert-pdf-page-to-png-aspose-dotnet/) @@ -164,6 +164,9 @@ Erfahren Sie, wie Sie mit Aspose.PDF für .NET komplexe LaTeX-Skripte in PDF-Dok ### [Bildhintergründe in PDFs mit Aspose.PDF für .NET festlegen: Eine umfassende Anleitung](./aspose-pdf-net-set-image-backgrounds/) Erfahren Sie, wie Sie Ihre PDF-Dokumente mit Aspose.PDF für .NET durch die Einrichtung von Bildhintergründen optimieren. Diese Anleitung enthält Tipps zur Einrichtung, Implementierung und Optimierung. +### [ExtGState zu PDF mit Aspose.PDF hinzufügen – Vollständige Anleitung](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Erfahren Sie, wie Sie mit Aspose.PDF für .NET ExtGState-Objekte zu PDFs hinzufügen, um Transparenz, Blendmodi und weitere Grafik‑Effekte zu steuern. + ## Weitere Ressourcen - [Aspose.PDF für Net-Dokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/german/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/german/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..409e9d989a --- /dev/null +++ b/pdf/german/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Erfahren Sie, wie Sie ExtGState zu PDF mit Aspose.Pdf hinzufügen. Diese + Schritt‑für‑Schritt‑Anleitung behandelt das Grafik‑Zustands‑Verzeichnis, die Bearbeitung + von PDF‑Ressourcen und die Einstellungen des Mischmodus. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: de +lastmod: 2026-07-07 +og_description: Fügen Sie ExtGState zu PDF mit Aspose.Pdf hinzu. Folgen Sie dieser + Anleitung, um die PDF‑Ressourcen zu ändern, ein Grafikzustands‑Dictionary zu erstellen, + Deckkraft und Mischmodus festzulegen und das Ergebnis zu speichern. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: ExtGState zu PDF hinzufügen – Aspose.Pdf Schritt‑für‑Schritt‑Anleitung +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: ExtGState zu PDF mit Aspose.Pdf hinzufügen – Vollständiger Leitfaden +url: /de/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# ExtGState zu PDF hinzufügen – Vollständiger Programmierleitfaden + +Haben Sie jemals **ExtGState zu PDF hinzufügen** müssen, waren sich aber nicht sicher, welche API‑Aufrufe zu verwenden sind? Sie sind nicht allein. In diesem Tutorial führen wir Sie Schritt für Schritt durch die genauen Schritte mit **Aspose.Pdf**, um die Seitenressourcen anzupassen, ein benutzerdefiniertes **Graphics‑State‑Dictionary** zu erstellen und Deckkraft sowie Mischmodus festzulegen – alles in nur wenigen Zeilen C#. + +Wir beginnen damit, ein vorhandenes PDF zu laden, tauchen dann in seine **PDF‑Ressourcen** ein, fügen einen neuen ExtGState‑Eintrag ein und speichern schließlich das modifizierte Dokument. Am Ende haben Sie ein wiederverwendbares Snippet, das Sie in jedes .NET‑Projekt einbinden können, das feinkörnige Grafiksteuerung benötigt. + +## Was Sie benötigen + +- .NET 6 (oder jede aktuelle .NET‑Framework‑Version) +- Das **Aspose.Pdf for .NET** NuGet‑Paket (`Aspose.Pdf`) +- Eine Eingabe‑PDF (`input.pdf`) in einem Ordner, den Sie referenzieren können +- Grundlegendes Verständnis der C#‑Syntax (keine tiefen PDF‑Interna erforderlich) + +Wenn Sie das haben, legen wir los. + +![ExtGState zu PDF hinzufügen mit Aspose.Pdf](placeholder.png){alt="ExtGState zu PDF hinzufügen mit Aspose.Pdf"} + +## Schritt 1: ExtGState zu PDF hinzufügen – Dokument laden + +Das Erste, was wir tun müssen, ist das PDF zu öffnen, das wir ändern wollen. Die Verwendung eines `using`‑Blocks sorgt dafür, dass das Dateihandle automatisch freigegeben wird, was besonders praktisch ist, wenn Sie später dieselbe Datei überschreiben. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Warum das wichtig ist:* Das Laden der Datei gibt Ihnen Zugriff auf die `Pages`‑Sammlung, in der die **PDF‑Ressourcen** jeder Seite leben. Ohne das Dokument zu öffnen, können Sie das ExtGState‑Dictionary nicht berühren. + +## Schritt 2: PDF‑Ressourcen mit Aspose.Pdf zugreifen + +Jede Seite in einem PDF besitzt ein `/Resources`‑Dictionary, das Schriften, Bilder und Grafik‑States enthält. Wir müssen die Ressourcen der ersten Seite holen und sie in einen `DictionaryEditor` einwickeln, damit wir Einträge lesen und schreiben können. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Pro‑Tipp:* Wenn Ihr PDF mehrere Seiten hat und Sie dasselbe ExtGState auf allen benötigen, iterieren Sie über `pdfDocument.Pages` und wiederholen die folgenden Schritte für jede Seite. + +## Schritt 3: Vorhandenes ExtGState‑Dictionary abrufen (oder neu erstellen) + +Der `/ExtGState`‑Eintrag kann bereits existieren. Wir holen ihn, um unseren neuen Grafik‑State unter einem eindeutigen Schlüssel hinzuzufügen. Wenn er nicht existiert, wirft Aspose.Pdf eine Ausnahme, daher schützen wir uns, indem wir bei Bedarf ein frisches Dictionary erstellen. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Was passiert:* `resourcesEditor["ExtGState"]` liefert ein COS‑Objekt; der Aufruf von `ToCosPdfDictionary()` konvertiert es in ein veränderbares Dictionary, dem wir Einträge anhängen können. + +## Schritt 4: Graphics‑State‑Dictionary mit gewünschten Parametern erstellen + +Jetzt kommt das Herzstück des Tutorials: das Erstellen eines **Graphics‑State‑Dictionary**, das Strich‑Deckkraft (`CA`), Füll‑Deckkraft (`ca`) und Mischmodus (`BM`) definiert. Diese Schlüssel folgen der PDF‑Spezifikation für ExtGState‑Einträge. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Warum wir das setzen:* +- **CA** und **ca** ermöglichen die Kontrolle, wie Tinten mit dem Seitenhintergrund vermischt werden – perfekt für Wasserzeichen oder halbtransparente Overlays. +- **BM** (Blend Mode) bestimmt, wie Quell‑ und Ziel‑Farben kombiniert werden; `"Normal"` ist der Standard, aber Sie können zu `"Multiply"` oder `"Screen"` wechseln, um kreative Effekte zu erzielen. + +## Schritt 5: Neues ExtGState in die Seiten‑Ressourcen einfügen + +Wir geben unserem neuen Grafik‑State einen Namen (`GS0`) und stecken ihn in das ExtGState‑Dictionary der Seite. Von nun an erbt jeder Content‑Stream, der `/GS0` referenziert, die von uns definierte Deckkraft und den Mischmodus. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Hinweis zu Randfällen:* Wenn `GS0` bereits existiert, überschreibt Aspose.Pdf es. Um versehentliche Kollisionen zu vermeiden, sollten Sie einen GUID‑basierten Namen wie `"GS_" + Guid.NewGuid().ToString("N")` generieren. + +## Schritt 6: Modifiziertes PDF speichern + +Abschließend schreiben wir die Änderungen zurück auf die Festplatte. Sie können die Originaldatei überschreiben oder eine neue Kopie ausgeben – je nach Ihrem Workflow. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Was Sie erwarten können:* Öffnen Sie `output.pdf` in einem beliebigen PDF‑Betrachter. Alle Zeichenbefehle, die später `GS0` referenzieren, werden nun mit 50 % Füll‑Deckkraft und voller Strich‑Deckkraft im normalen Mischmodus gerendert. + +--- + +## Bonus: Das neue ExtGState in einem Content‑Stream anwenden + +Allein das Hinzufügen des ExtGState‑Dictionary reicht nicht aus; Sie müssen dem PDF‑Content‑Stream mitteilen, dass er es verwenden soll. Hier ein kurzer Ausschnitt, der ein halbtransparentes Rechteck mit dem gerade erstellten State zeichnet: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Erklärung:* +- `q`/`Q` schieben und poppen den Graphics‑State‑Stack, sodass unsere Änderungen nicht auf andere Elemente übergreifen. +- `/GS0 gs` wählt den von uns hinzugefügten Graphics‑State aus. +- Der `re`‑Operator zeichnet ein Rechteck, und `B` füllt und zeichnet es mit der definierten Deckkraft. + +Passen Sie gerne die Rechteckkoordinaten, Farben oder sogar die Form zu Text an – jeder Zeichenbefehl wird nun die ExtGState‑Einstellungen respektieren. + +## Häufige Fallstricke & wie man sie vermeidet + +| Problem | Warum es passiert | Lösung | +|---------|-------------------|--------| +| **Fehlender `/ExtGState`‑Eintrag** | Einige PDFs definieren das Dictionary nie. | Prüfen Sie `resourcesEditor.ContainsKey("ExtGState")` bevor Sie darauf zugreifen; falls `false`, erstellen Sie ein neues leeres Dictionary und fügen es zu `resourcesEditor` hinzu. | +| **Deckkraft wird nicht angewendet** | Der Content‑Stream referenziert den neuen State nie. | Fügen Sie `/GS0 gs` vor allen Zeichenbefehlen ein, die betroffen sein sollen. | +| **Mischmodus wird ignoriert** | Der Viewer unterstützt bestimmte Mischmodi nicht. | Verwenden Sie weit verbreitete Modi wie `"Normal"` oder `"Multiply"` für maximale Kompatibilität. | +| **Mehrere Seiten benötigen denselben State** | Nur die erste Seite wurde bearbeitet. | Iterieren Sie über `pdfDocument.Pages` und wiederholen Sie die Schritte 2‑5 für jede Seite. | + +## Vollständiges funktionierendes Beispiel + +Unten finden Sie das komplette, copy‑paste‑bereite Programm, das alle Schritte, Fehlerbehandlung und eine Demonstration der Verwendung des neuen ExtGState enthält. + + + +## Was sollten Sie als Nächstes lernen? + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige, funktionierende Code‑Beispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, weitere API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Wie man ein Linienobjekt in PDF mit Aspose.PDF für .NET hinzufügt: Eine Schritt‑für‑Schritt‑Anleitung](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [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 Bilder zu PDFs hinzufügt mit Aspose.PDF für .NET: Eine Schritt‑für‑Schritt‑Anleitung](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/greek/net/images-graphics/_index.md b/pdf/greek/net/images-graphics/_index.md index 09e2123b0d..6df35870b5 100644 --- a/pdf/greek/net/images-graphics/_index.md +++ b/pdf/greek/net/images-graphics/_index.md @@ -161,8 +161,8 @@ ### [Απόδοση LaTeX σε PDF με το Aspose.PDF .NET: Οδηγός βήμα προς βήμα](./render-latex-aspose-pdf-net-guide/) Μάθετε πώς να αποδίδετε σύνθετα σενάρια LaTeX σε έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET, συμπεριλαμβανομένων συμβουλών εγκατάστασης, υλοποίησης και βελτιστοποίησης. -### [Ορισμός φόντου εικόνας σε PDF χρησιμοποιώντας το Aspose.PDF για .NET: Ένας πλήρης οδηγός](./aspose-pdf-net-set-image-backgrounds/) -Μάθετε πώς να βελτιώσετε τα έγγραφα PDF σας ορίζοντας φόντο εικόνας χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο οδηγός καλύπτει συμβουλές εγκατάστασης, υλοποίησης και βελτιστοποίησης. +### [Προσθήκη ExtGState σε PDF με το Aspose.Pdf – Πλήρης Οδηγός](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Μάθετε πώς να προσθέτετε ExtGState σε PDF χρησιμοποιώντας το Aspose.Pdf για .NET, βελτιώνοντας τη διαφάνεια και τα εφέ. ## Πρόσθετοι Πόροι diff --git a/pdf/greek/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/greek/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..28f1adda05 --- /dev/null +++ b/pdf/greek/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,196 @@ +--- +category: general +date: 2026-07-07 +description: Μάθετε πώς να προσθέτετε ExtGState σε PDF χρησιμοποιώντας το Aspose.Pdf. + Αυτός ο οδηγός βήμα‑βήμα καλύπτει το λεξικό κατάστασης γραφικών, την επεξεργασία + πόρων PDF και τις ρυθμίσεις λειτουργίας ανάμειξης. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: el +lastmod: 2026-07-07 +og_description: Προσθέστε ExtGState σε PDF χρησιμοποιώντας το Aspose.Pdf. Ακολουθήστε + αυτόν τον οδηγό για να τροποποιήσετε τους πόρους του PDF, να δημιουργήσετε ένα λεξικό + κατάστασης γραφικών, να ορίσετε τη διαφάνεια και τη λειτουργία ανάμειξης και να + αποθηκεύσετε το αποτέλεσμα. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: Προσθήκη ExtGState σε PDF – Οδηγός βήμα-βήμα Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Προσθήκη ExtGState σε PDF με το Aspose.Pdf – Πλήρης Οδηγός +url: /el/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Προσθήκη ExtGState σε PDF – Πλήρης Οδηγός Προγραμματισμού + +Έχετε ποτέ χρειαστεί να **προσθέσετε ExtGState σε PDF** αλλά δεν ήσασταν σίγουροι ποιες κλήσεις API να χρησιμοποιήσετε; Δεν είστε μόνοι. Σε αυτό το tutorial θα περάσουμε βήμα‑βήμα τις ακριβείς ενέργειες χρησιμοποιώντας **Aspose.Pdf** για να τροποποιήσουμε τους πόρους της σελίδας, να δημιουργήσουμε ένα προσαρμοσμένο **graphics state dictionary**, και να ορίσουμε τη διαφάνεια και τη λειτουργία ανάμειξης — όλα σε λίγες γραμμές C#. + +Θα ξεκινήσουμε φορτώνοντας ένα υπάρχον PDF, μετά θα εμβαθύνουμε στους **PDF resources**, θα ενσωματώσουμε μια νέα καταχώρηση ExtGState και τέλος θα αποθηκεύσουμε το τροποποιημένο έγγραφο. Στο τέλος θα έχετε ένα επαναχρησιμοποιήσιμο snippet που μπορείτε να ενσωματώσετε σε οποιοδήποτε .NET project που χρειάζεται ακριβή έλεγχο γραφικών. + +## Τι Θα Χρειαστεί + +- .NET 6 (ή οποιαδήποτε πρόσφατη έκδοση του .NET Framework) +- Το πακέτο NuGet **Aspose.Pdf for .NET** (`Aspose.Pdf`) +- Ένα αρχείο PDF εισόδου (`input.pdf`) τοποθετημένο σε φάκελο που μπορείτε να αναφέρετε +- Μια βασική κατανόηση της σύνταξης C# (χωρίς ανάγκη για βαθιά γνώση των εσωτερικών του PDF) + +Αν τα έχετε αυτά, ας ξεκινήσουμε. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Add ExtGState to PDF using Aspose.Pdf"} + +## Βήμα 1: Προσθήκη ExtGState σε PDF – Φόρτωση του Εγγράφου + +Το πρώτο πράγμα που πρέπει να κάνουμε είναι να ανοίξουμε το PDF που θέλουμε να τροποποιήσουμε. Η χρήση ενός μπλοκ `using` εξασφαλίζει ότι το χειριστήριο του αρχείου απελευθερώνεται αυτόματα, κάτι που είναι ιδιαίτερα χρήσιμο όταν αργότερα αντικαθιστάτε το ίδιο αρχείο. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Γιατί είναι σημαντικό:* Η φόρτωση του αρχείου σας δίνει πρόσβαση στη συλλογή `Pages`, όπου ζουν οι **PDF resources** κάθε σελίδας. Χωρίς το άνοιγμα του εγγράφου δεν μπορείτε να επεξεργαστείτε το λεξικό ExtGState. + +## Βήμα 2: Πρόσβαση στους PDF Resources με Aspose.Pdf + +Κάθε σελίδα σε ένα PDF έχει ένα λεξικό `/Resources` που περιέχει γραμματοσειρές, εικόνες και graphics states. Πρέπει να πάρουμε τους πόρους της πρώτης σελίδας και να τους τυλίξουμε σε ένα `DictionaryEditor` ώστε να μπορούμε να διαβάζουμε και να γράφουμε καταχωρήσεις. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Συμβουλή:* Αν το PDF σας έχει πολλές σελίδες και χρειάζεστε το ίδιο ExtGState σε όλες, κάντε βρόχο πάνω από `pdfDocument.Pages` και επαναλάβετε τα παρακάτω βήματα για κάθε σελίδα. + +## Βήμα 3: Ανάκτηση Υπάρχοντος Λεξικού ExtGState (ή Δημιουργία Νέου) + +Η καταχώρηση `/ExtGState` μπορεί να υπάρχει ήδη. Την ανακτούμε ώστε να προσθέσουμε το νέο graphics state μας κάτω από ένα μοναδικό κλειδί. Αν δεν υπάρχει, το Aspose.Pdf θα ρίξει εξαίρεση, γι' αυτό προστατεύουμε το σενάριο δημιουργώντας ένα νέο λεξικό όταν χρειάζεται. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Τι συμβαίνει:* Το `resourcesEditor["ExtGState"]` επιστρέφει ένα COS object· η κλήση `ToCosPdfDictionary()` το μετατρέπει σε ένα μεταβλητό λεξικό στο οποίο μπορούμε να προσθέσουμε καταχωρήσεις. + +## Βήμα 4: Δημιουργία Graphics‑State Dictionary με Επιθυμητές Παραμέτρους + +Τώρα έρχεται η καρδιά του tutorial: η κατασκευή ενός **graphics state dictionary** που ορίζει τη διαφάνεια γραμμής (`CA`), τη διαφάνεια γεμίσματος (`ca`) και τη λειτουργία ανάμειξης (`BM`). Αυτά τα κλειδιά ακολουθούν την προδιαγραφή PDF για καταχωρήσεις ExtGState. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Γιατί τα ορίζουμε:* +- **CA** και **ca** σας επιτρέπουν να ελέγχετε πώς τα μελάνια αναμειγνύονται με το φόντο της σελίδας — ιδανικό για υδατογραφήματα ή ημιδιαφανείς επικάλυψεις. +- **BM** (Blend Mode) καθορίζει πώς συνδυάζονται τα χρώματα πηγής και προορισμού· το `"Normal"` είναι η προεπιλογή, αλλά μπορείτε να αλλάξετε σε `"Multiply"` ή `"Screen"` για δημιουργικά εφέ. + +## Βήμα 5: Εισαγωγή του Νέου ExtGState στους Πόρους της Σελίδας + +Δίνουμε στο νέο graphics state μας ένα όνομα (`GS0`) και το τοποθετούμε στο λεξικό ExtGState της σελίδας. Από εδώ και πέρα, οποιοδήποτε content stream που αναφέρεται στο `/GS0` θα κληρονομήσει τη διαφάνεια και τη λειτουργία ανάμειξης που ορίσαμε. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Σημείωση για ειδική περίπτωση:* Αν το `GS0` υπάρχει ήδη, το Aspose.Pdf θα το αντικαταστήσει. Για να αποφύγετε τυχαίες συγκρούσεις, σκεφτείτε να δημιουργήσετε ένα όνομα βασισμένο σε GUID όπως `"GS_" + Guid.NewGuid().ToString("N")`. + +## Βήμα 6: Αποθήκευση του Τροποποιημένου PDF + +Τέλος, γράφουμε τις αλλαγές πίσω στο δίσκο. Μπορείτε να αντικαταστήσετε το αρχικό αρχείο ή να δημιουργήσετε ένα νέο αντίγραφο — ό,τι ταιριάζει στη ροή εργασίας σας. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Τι να περιμένετε:* Ανοίξτε το `output.pdf` σε οποιονδήποτε προβολέα PDF. Οποιαδήποτε εντολή σχεδίασης που αργότερα αναφέρεται στο `GS0` θα αποδίδει τώρα με 50 % διαφάνεια γεμίσματος και πλήρη διαφάνεια γραμμής, χρησιμοποιώντας τη λειτουργία ανάμειξης normal. + +--- + +## Μπόνους: Εφαρμογή του Νέου ExtGState σε Content Stream + +Η προσθήκη του λεξικού ExtGState από μόνη της δεν αρκεί· πρέπει να πείτε στο PDF content stream να το χρησιμοποιήσει. Ακολουθεί ένα σύντομο snippet που σχεδιάζει ένα ημιδιαφανές ορθογώνιο χρησιμοποιώντας την κατάσταση που μόλις δημιουργήσαμε: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Επεξήγηση:* +- `q`/`Q` σπρώχνουν και απομακρύνουν την στοίβα graphics state, διασφαλίζοντας ότι οι αλλαγές μας δεν διαρρέουν σε άλλα στοιχεία. +- `/GS0 gs` επιλέγει το graphics state που προσθέσαμε. +- Ο τελεστής `re` σχεδιάζει ένα ορθογώνιο, και το `B` το γεμίζει και το περιγράφει χρησιμοποιώντας τη καθορισμένη διαφάνεια. + +Αισθανθείτε ελεύθεροι να τροποποιήσετε τις συντεταγμένες του ορθογωνίου, τα χρώματα, ή ακόμη και να αντικαταστήσετε το σχήμα με κείμενο — οποιαδήποτε εντολή σχεδίασης θα σέβεται πλέον τις ρυθμίσεις ExtGState. + +## Συνηθισμένα Παράπτωμα & Πώς να τα Αποφύγετε + +| Πρόβλημα | Γιατί συμβαίνει | Διόρθωση | +|-------|----------------|-----| +| **Απουσία καταχώρησης `/ExtGState`** | Κάποια PDFs δεν ορίζουν ποτέ το λεξικό. | Ελέγξτε `resourcesEditor.ContainsKey("ExtGState")` πριν την πρόσβαση· αν είναι ψευδές, δημιουργήστε ένα νέο κενό λεξικό και προσθέστε το στο `resourcesEditor`. | +| **Διαφάνεια δεν εφαρμόζεται** | Το content stream δεν αναφέρει ποτέ τη νέα κατάσταση. | Εισάγετε `/GS0 gs` πριν από οποιεσδήποτε εντολές σχεδίασης θέλετε να επηρεαστούν. | +| **Λειτουργία blend αγνοείται** | Ο προβολέας δεν υποστηρίζει ορισμένες λειτουργίες blend. | Χρησιμοποιήστε ευρέως υποστηριζόμενες λειτουργίες όπως `"Normal"` ή `"Multiply"` για μέγιστη συμβατότητα. | +| **Πολλές σελίδες χρειάζονται την ίδια κατάσταση** | Επεξεργάστηκε μόνο η πρώτη σελίδα. | Κάντε βρόχο πάνω από `pdfDocument.Pages` και επαναλάβετε τα βήματα 2‑5 για κάθε σελίδα. | + +## Πλήρες Παράδειγμα Λειτουργίας + +Παρακάτω είναι το πλήρες, έτοιμο για αντιγραφή πρόγραμμα που ενσωματώνει όλα τα βήματα, τη διαχείριση σφαλμάτων, και μια επίδειξη χρήσης του νέου ExtGState. + + + +## Τι Θα Μάθετε Στη Σειρά; + +Τα παρακάτω tutorials καλύπτουν στενά σχετικές θεματικές που βασίζονται στις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κατακτήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας projects. + +- [Πώς να Προσθέσετε Αντικείμενο Γραμμής σε PDF Χρησιμοποιώντας Aspose.PDF for .NET: Οδηγός Βήμα-Βήμα](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Προσθήκη Σφραγίδων Εικόνας σε PDFs Χρησιμοποιώντας Aspose.PDF for .NET: Οδηγός Βήμα-Βήμα](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Πώς να Προσθέσετε Εικόνες σε PDFs Χρησιμοποιώντας Aspose.PDF for .NET: Οδηγός Βήμα-Βήμα](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hindi/net/images-graphics/_index.md b/pdf/hindi/net/images-graphics/_index.md index 17910f1ed4..c774c759e2 100644 --- a/pdf/hindi/net/images-graphics/_index.md +++ b/pdf/hindi/net/images-graphics/_index.md @@ -164,6 +164,9 @@ Aspose.PDF नेट के लिए एक कोड ट्यूटोरि ### [.NET के लिए Aspose.PDF का उपयोग करके PDF में छवि पृष्ठभूमि सेट करें: एक व्यापक गाइड](./aspose-pdf-net-set-image-backgrounds/) जानें कि .NET के लिए Aspose.PDF का उपयोग करके छवि पृष्ठभूमि सेट करके अपने PDF दस्तावेज़ों को कैसे बेहतर बनाया जाए। यह मार्गदर्शिका सेटअप, कार्यान्वयन और अनुकूलन युक्तियों को कवर करती है। +### [Aspose.Pdf के साथ PDF में ExtGState जोड़ें – पूर्ण गाइड](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Aspose.Pdf का उपयोग करके PDF में ExtGState सेट करके पारदर्शिता और ग्राफ़िक प्रभावों को नियंत्रित करने की पूरी प्रक्रिया सीखें। + ## अतिरिक्त संसाधन - [Aspose.PDF for Net दस्तावेज़ीकरण](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hindi/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/hindi/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..88da43472c --- /dev/null +++ b/pdf/hindi/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Aspose.Pdf का उपयोग करके PDF में ExtGState जोड़ना सीखें। यह चरण‑दर‑चरण + गाइड ग्राफ़िक्स स्टेट डिक्शनरी, PDF संसाधनों के संपादन और ब्लेंड मोड सेटिंग्स को + कवर करता है। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: hi +lastmod: 2026-07-07 +og_description: Aspose.Pdf का उपयोग करके PDF में ExtGState जोड़ें। PDF संसाधनों को + संशोधित करने, ग्राफ़िक्स स्टेट डिक्शनरी बनाने, अपारदर्शिता और ब्लेंड मोड सेट करने, + और परिणाम सहेजने के लिए इस गाइड का पालन करें। +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: PDF में ExtGState जोड़ें – Aspose.Pdf चरण-दर-चरण ट्यूटोरियल +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Aspose.Pdf के साथ PDF में ExtGState जोड़ें – पूर्ण गाइड +url: /hi/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF में ExtGState जोड़ें – पूर्ण प्रोग्रामिंग वॉकथ्रू + +क्या आपको कभी **PDF में ExtGState जोड़ने** की ज़रूरत पड़ी है लेकिन आप नहीं जानते थे कि कौन से API कॉल्स का उपयोग करें? आप अकेले नहीं हैं। इस ट्यूटोरियल में हम **Aspose.Pdf** का उपयोग करके पेज रिसोर्सेज़ को संशोधित करने, एक कस्टम **ग्राफ़िक्स स्टेट डिक्शनरी** बनाने, और अपारदर्शिता तथा ब्लेंड मोड सेट करने के सटीक चरणों को दिखाएंगे—सिर्फ कुछ ही C# लाइनों में। + +हम एक मौजूदा PDF को लोड करके शुरू करेंगे, फिर उसके **PDF रिसोर्सेज़** में गहराई से जाएंगे, एक नया ExtGState एंट्री इंजेक्ट करेंगे, और अंत में संशोधित दस्तावेज़ को सहेजेंगे। अंत तक आपके पास एक पुन: उपयोग योग्य स्निपेट होगा जिसे आप किसी भी .NET प्रोजेक्ट में डाल सकते हैं जिसे सूक्ष्म ग्राफ़िक्स नियंत्रण की आवश्यकता है। + +## आपको क्या चाहिए + +- .NET 6 (या कोई भी हालिया .NET Framework संस्करण) +- **Aspose.Pdf for .NET** NuGet पैकेज (`Aspose.Pdf`) +- एक इनपुट PDF (`input.pdf`) जिसे आप संदर्भित कर सकें ऐसे फ़ोल्डर में रखें +- C# सिंटैक्स की बुनियादी समझ (गहरी PDF आंतरिक जानकारी की आवश्यकता नहीं) + +यदि आपके पास ये सब है, तो चलिए शुरू करते हैं। + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Aspose.Pdf का उपयोग करके PDF में ExtGState जोड़ें"} + +## चरण 1: PDF में ExtGState जोड़ें – दस्तावेज़ लोड करें + +पहला काम जो हमें करना है वह है उस PDF को खोलना जिसे हम संशोधित करना चाहते हैं। `using` ब्लॉक का उपयोग करने से फ़ाइल हैंडल स्वचालित रूप से रिलीज़ हो जाता है, जो बाद में उसी फ़ाइल को ओवरराइट करने पर विशेष रूप से उपयोगी होता है। + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*क्यों यह महत्वपूर्ण है:* फ़ाइल लोड करने से आपको `Pages` कलेक्शन तक पहुँच मिलती है, जहाँ प्रत्येक पेज के **PDF रिसोर्सेज़** स्थित होते हैं। दस्तावेज़ को खोले बिना आप ExtGState डिक्शनरी को नहीं छू सकते। + +## चरण 2: Aspose.Pdf के साथ PDF रिसोर्सेज़ तक पहुँचें + +PDF के प्रत्येक पेज में एक `/Resources` डिक्शनरी होती है जिसमें फ़ॉन्ट, इमेज और ग्राफ़िक्स स्टेट्स रखे होते हैं। हमें पहले पेज के रिसोर्सेज़ को प्राप्त करके उन्हें `DictionaryEditor` में लपेटना होगा ताकि हम एंट्रीज़ को पढ़ और लिख सकें। + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*प्रो टिप:* यदि आपके PDF में कई पेज हैं और आपको सभी पर एक ही ExtGState चाहिए, तो `pdfDocument.Pages` पर लूप करें और प्रत्येक पेज के लिए निम्न चरणों को दोहराएँ। + +## चरण 3: मौजूदा ExtGState डिक्शनरी प्राप्त करें (या नई बनाएं) + +`/ExtGState` एंट्री पहले से मौजूद हो सकती है। हम इसे प्राप्त करते हैं ताकि हम अपने नए ग्राफ़िक्स स्टेट को एक अनूठी कुंजी के तहत जोड़ सकें। यदि यह मौजूद नहीं है, तो Aspose.Pdf त्रुटि फेंकेगा, इसलिए हम आवश्यकता पड़ने पर एक नई डिक्शनरी बनाकर इसे संभालते हैं। + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*क्या हो रहा है:* `resourcesEditor["ExtGState"]` एक COS ऑब्जेक्ट लौटाता है; `ToCosPdfDictionary()` को कॉल करने से यह एक परिवर्तनीय डिक्शनरी में बदल जाता है जिसमें हम एंट्रीज़ जोड़ सकते हैं। + +## चरण 4: वांछित पैरामीटरों के साथ ग्राफ़िक्स‑स्टेट डिक्शनरी बनाएं + +अब ट्यूटोरियल का मुख्य भाग आता है: एक **ग्राफ़िक्स स्टेट डिक्शनरी** बनाना जो स्ट्रोक अपारदर्शिता (`CA`), फ़िल अपारदर्शिता (`ca`), और ब्लेंड मोड (`BM`) को परिभाषित करती है। ये कुंजियाँ ExtGState एंट्रीज़ के लिए PDF स्पेसिफिकेशन का पालन करती हैं। + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*हम इनको क्यों सेट करते हैं:* +- **CA** और **ca** आपको नियंत्रित करने देते हैं कि इंक पेज बैकग्राउंड के साथ कैसे ब्लेंड होते हैं—वॉटरमार्किंग या अर्ध‑पारदर्शी ओवरले के लिए उत्तम। +- **BM** (ब्लेंड मोड) निर्धारित करता है कि स्रोत और गंतव्य रंग कैसे मिलते हैं; `"Normal"` डिफ़ॉल्ट है, लेकिन आप रचनात्मक प्रभावों के लिए `"Multiply"` या `"Screen"` पर स्विच कर सकते हैं। + +## चरण 5: नई ExtGState को पेज रिसोर्सेज़ में डालें + +हम अपने नए ग्राफ़िक्स स्टेट को एक नाम (`GS0`) देते हैं और इसे पेज के ExtGState डिक्शनरी में डालते हैं। अब से, कोई भी कंटेंट स्ट्रीम जो `/GS0` को संदर्भित करता है, वह हमारे द्वारा परिभाषित अपारदर्शिता और ब्लेंड मोड को विरासत में लेगा। + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*एज केस नोट:* यदि `GS0` पहले से मौजूद है, तो Aspose.Pdf इसे ओवरराइट कर देगा। आकस्मिक टकराव से बचने के लिए, `"GS_" + Guid.NewGuid().ToString("N")` जैसे GUID‑आधारित नाम बनाने पर विचार करें। + +## चरण 6: संशोधित PDF को सहेजें + +अंत में, हम बदलावों को डिस्क पर लिखते हैं। आप मूल फ़ाइल को ओवरराइट कर सकते हैं या नई कॉपी बना सकते हैं—जो भी आपके वर्कफ़्लो के अनुकूल हो। + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*क्या उम्मीद करें:* किसी भी PDF व्यूअर में `output.pdf` खोलें। कोई भी ड्राइंग कमांड जो बाद में `GS0` को संदर्भित करेगा, अब 50 % फ़िल अपारदर्शिता और पूर्ण स्ट्रोक अपारदर्शिता के साथ, सामान्य ब्लेंड मोड का उपयोग करके रेंडर होगा। + +--- + +## बोनस: कंटेंट स्ट्रीम में नई ExtGState लागू करना + +केवल ExtGState डिक्शनरी जोड़ना पर्याप्त नहीं है; आपको PDF कंटेंट स्ट्रीम को इसे उपयोग करने के लिए बताना होगा। यहाँ एक छोटा स्निपेट है जो हमने अभी बनाई हुई स्टेट का उपयोग करके अर्ध‑पारदर्शी आयत बनाता है: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*व्याख्या:* +- `q`/`Q` ग्राफ़िक्स स्टेट स्टैक को पुश और पॉप करते हैं, जिससे हमारे बदलाव अन्य तत्वों में नहीं फैलते। +- `/GS0 gs` वह ग्राफ़िक्स स्टेट चुनता है जिसे हमने जोड़ा था। +- `re` ऑपरेटर एक आयत बनाता है, और `B` उसे परिभाषित अपारदर्शिता के साथ भरता और स्ट्रोक करता है। + +आयत के निर्देशांक, रंगों को बदलने या यहाँ तक कि आकार को टेक्स्ट से बदलने में संकोच न करें—कोई भी ड्राइंग कमांड अब ExtGState सेटिंग्स का सम्मान करेगा। + +## सामान्य समस्याएँ और उन्हें कैसे टालें + +| Issue | Why it Happens | Fix | +|-------|----------------|-----| +| **`/ExtGState` एंट्री गायब** | कुछ PDFs कभी डिक्शनरी को परिभाषित नहीं करते। | एक्सेस करने से पहले `resourcesEditor.ContainsKey("ExtGState")` जांचें; यदि false हो, तो एक नई खाली डिक्शनरी बनाएं और उसे `resourcesEditor` में जोड़ें। | +| **अपारदर्शिता लागू नहीं हुई** | कंटेंट स्ट्रीम कभी नई स्टेट को संदर्भित नहीं करता। | जिस भी ड्राइंग कमांड को आप प्रभावित करना चाहते हैं, उसके पहले `/GS0 gs` डालें। | +| **ब्लेंड मोड अनदेखा** | व्यूअर कुछ ब्लेंड मोड्स को समर्थन नहीं देता। | अधिकतम संगतता के लिए `"Normal"` या `"Multiply"` जैसे व्यापक रूप से समर्थित मोड्स का उपयोग करें। | +| **कई पेजों को समान स्टेट चाहिए** | केवल पहला पेज संपादित हुआ। | `pdfDocument.Pages` पर लूप करें और प्रत्येक पेज के लिए चरण 2‑5 दोहराएँ। | + +## पूर्ण कार्यशील उदाहरण + +नीचे पूरा, कॉपी‑पेस्ट‑तैयार प्रोग्राम दिया गया है जो सभी चरणों, त्रुटि संभालने, और नई ExtGState के उपयोग का प्रदर्शन सम्मिलित करता है। + + + +## अब आपको क्या सीखना चाहिए? + +निम्नलिखित ट्यूटोरियल्स उन निकट संबंधित विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं जो आपको अतिरिक्त API फीचर्स में महारत हासिल करने और अपने प्रोजेक्ट्स में वैकल्पिक कार्यान्वयन दृष्टिकोणों का पता लगाने में मदद करती हैं। + +- [Aspose.PDF for .NET: PDF में लाइन ऑब्जेक्ट कैसे जोड़ें: चरण‑दर‑चरण गाइड](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Aspose.PDF for .NET: PDFs में इमेज स्टैम्प कैसे जोड़ें: चरण‑दर‑चरण गाइड](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Aspose.PDF for .NET: PDFs में इमेज कैसे जोड़ें: चरण‑दर‑चरण गाइड](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hongkong/net/images-graphics/_index.md b/pdf/hongkong/net/images-graphics/_index.md index 0fd1aa03ef..5b0fbe7bf0 100644 --- a/pdf/hongkong/net/images-graphics/_index.md +++ b/pdf/hongkong/net/images-graphics/_index.md @@ -78,7 +78,7 @@ Aspose.PDF Net 程式碼教學 了解如何使用 Aspose.PDF for .NET 將影像無縫地新增至您的 PDF 文件。本逐步指南涵蓋設定、實施和實際應用。 ### [如何使用 Aspose.PDF for .NET 將影像新增至 PDF:逐步指南](./add-images-to-pdfs-aspose-pdf-net/) -了解如何使用 Aspose.PDF for .NET 將影像無縫地新增至您的 PDF。本指南介紹如何為現有 PDF 新增影像以及如何從 DICOM 檔案建立新影像。 +了解如何使用 Aspose.PDF for .NET 將影像無縫地新增至 PDF。本指南介紹如何為現有 PDF 新增影像以及如何從 DICOM 檔案建立新影像。 ### [如何使用 Aspose.PDF for .NET 為 PDF 新增影像頁首:逐步指南](./add-image-header-pdf-aspose-dotnet/) 透過本全面的逐步指南了解如何使用 Aspose.PDF for .NET 將影像標題新增至 PDF 文件。 @@ -164,6 +164,9 @@ Aspose.PDF Net 程式碼教學 ### [使用 Aspose.Pdf for .NET 設定 PDF 中的影像背景:綜合指南](./aspose-pdf-net-set-image-backgrounds/) 了解如何使用 Aspose.PDF for .NET 設定影像背景來增強您的 PDF 文件。本指南涵蓋設定、實作和優化技巧。 +### [使用 Aspose.PDF 為 PDF 添加 ExtGState – 完整指南](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +了解如何使用 Aspose.PDF 在 PDF 中設定 ExtGState 以控制透明度和混合模式的完整步驟指南。 + ## 其他資源 - [Aspose.PDF 用於網頁文檔](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hongkong/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/hongkong/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..e03c152b74 --- /dev/null +++ b/pdf/hongkong/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,191 @@ +--- +category: general +date: 2026-07-07 +description: 學習如何使用 Aspose.Pdf 向 PDF 添加 ExtGState。本分步指南涵蓋圖形狀態字典、PDF 資源編輯以及混合模式設定。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: zh-hant +lastmod: 2026-07-07 +og_description: 使用 Aspose.Pdf 為 PDF 添加 ExtGState。請依照本指南修改 PDF 資源、建立圖形狀態字典、設定不透明度與混合模式,並儲存結果。 +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: 將 ExtGState 添加至 PDF – Aspose.Pdf 逐步教學 +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: 使用 Aspose.Pdf 為 PDF 添加 ExtGState – 完整指南 +url: /zh-hant/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 PDF 中加入 ExtGState – 完整程式教學 + +曾經需要 **add ExtGState to PDF** 但不確定該使用哪個 API 呼叫嗎?你並不孤單。在本教學中,我們將使用 **Aspose.Pdf** 逐步說明如何調整頁面資源、建立自訂的 **graphics state dictionary**,以及設定不透明度與混合模式——只需幾行 C# 程式碼。 + +我們會先載入既有的 PDF,接著深入其 **PDF resources**,注入新的 ExtGState 條目,最後儲存修改後的文件。完成後,你將擁有一段可重複使用的程式碼片段,能直接放入任何需要精細圖形控制的 .NET 專案中。 + +## 需要的環境 + +- .NET 6(或任何近期的 .NET Framework 版本) +- **Aspose.Pdf for .NET** NuGet 套件 (`Aspose.Pdf`) +- 一個放在可參考資料夾中的輸入 PDF (`input.pdf`) +- 基本的 C# 語法了解(不需要深入的 PDF 內部知識) + +如果你已具備上述條件,讓我們馬上開始吧。 + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="使用 Aspose.Pdf 在 PDF 中加入 ExtGState"} + +## 步驟 1:在 PDF 中加入 ExtGState – 載入文件 + +首先,我們必須開啟想要修改的 PDF。使用 `using` 區塊可確保檔案句柄自動釋放,這在之後要覆寫同一檔案時特別方便。 + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*為什麼這很重要:* 載入檔案後,你即可存取 `Pages` 集合,該集合內每一頁的 **PDF resources** 都位於其中。若未開啟文件,就無法操作 ExtGState 字典。 + +## 步驟 2:使用 Aspose.Pdf 存取 PDF 資源 + +PDF 中每一頁都有一個 `/Resources` 字典,裡面保存字型、影像與圖形狀態等資訊。我們需要取得第一頁的資源,並以 `DictionaryEditor` 包裝,以便讀寫條目。 + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*小技巧:* 若你的 PDF 有多頁且需要在所有頁面上使用相同的 ExtGState,請對 `pdfDocument.Pages` 進行迴圈,對每一頁重複以下步驟。 + +## 步驟 3:取得現有的 ExtGState 字典(或建立新字典) + +`/ExtGState` 條目可能已經存在。我們先取得它,以便在唯一的鍵下加入新的圖形狀態。若不存在,Aspose.Pdf 會拋出例外,因此我們會在需要時建立一個全新的字典。 + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*發生了什麼事:* `resourcesEditor["ExtGState"]` 會回傳一個 COS 物件;呼叫 `ToCosPdfDictionary()` 可將其轉換為可變的字典,讓我們可以追加條目。 + +## 步驟 4:建立具備所需參數的 Graphics‑State 字典 + +現在進入本教學的核心:建構一個 **graphics state dictionary**,定義筆觸不透明度 (`CA`)、填充不透明度 (`ca`) 與混合模式 (`BM`)。這些鍵遵循 PDF 規範的 ExtGState 條目。 + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*為什麼要設定這些:* +- **CA** 與 **ca** 讓你控制墨水與頁面背景的混合方式——非常適合浮水印或半透明覆蓋層。 +- **BM**(Blend Mode)決定來源與目標顏色的結合方式;`"Normal"` 為預設值,但你也可以改用 `"Multiply"` 或 `"Screen"` 以獲得創意效果。 + +## 步驟 5:將新 ExtGState 插入頁面資源 + +我們為新的圖形狀態取名為 `GS0`,並將其放入頁面的 ExtGState 字典。從此,只要內容串流引用 `/GS0`,就會套用我們剛剛定義的不透明度與混合模式。 + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*邊緣情況說明:* 若 `GS0` 已經存在,Aspose.Pdf 會直接覆寫。為避免意外衝突,建議使用 GUID 為基礎的名稱,例如 `"GS_" + Guid.NewGuid().ToString("N")`。 + +## 步驟 6:儲存已修改的 PDF + +最後,我們將變更寫回磁碟。你可以直接覆寫原始檔案,或輸出為全新檔案——依照你的工作流程自行決定。 + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*預期結果:* 在任何 PDF 檢視器中開啟 `output.pdf`。之後任何引用 `GS0` 的繪圖指令,都會以 50 % 填充不透明度、100 % 筆觸不透明度,且使用 normal 混合模式呈現。 + +--- + +## 加分項:在內容串流中套用新 ExtGState + +僅加入 ExtGState 字典還不夠,還必須告訴 PDF 內容串流使用它。以下是一段快速示例,利用剛建立的狀態繪製半透明矩形: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*說明:* +- `q`/`Q` 用於推入與彈出圖形狀態堆疊,確保我們的變更不會洩漏到其他元素。 +- `/GS0 gs` 會選取我們新增的圖形狀態。 +- `re` 運算子繪製矩形,`B` 會同時填充與描邊,使用先前定義的透明度。 + +隨意調整矩形座標、顏色,或改為繪製文字——任何繪圖指令現在都會遵循 ExtGState 設定。 + +## 常見問題與避免方法 + +| 問題 | 為什麼會發生 | 解決方式 | +|------|--------------|----------| +| **Missing `/ExtGState` entry** | 某些 PDF 從未定義此字典。 | 在存取前先檢查 `resourcesEditor.ContainsKey("ExtGState")`;若為 false,建立一個空的字典並加入 `resourcesEditor`。 | +| **Opacity not applied** | 內容串流未引用新的狀態。 | 在任何想要受影響的繪圖指令前插入 `/GS0 gs`。 | +| **Blend mode ignored** | 檢視器不支援某些混合模式。 | 使用廣泛支援的模式,如 `"Normal"` 或 `"Multiply"`,以確保相容性最高。 | +| **Multiple pages need the same state** | 只編輯了第一頁。 | 對 `pdfDocument.Pages` 迴圈,對每一頁重複步驟 2‑5。 | + +## 完整範例程式 + +以下是完整、可直接複製貼上的程式碼,涵蓋所有步驟、錯誤處理,以及示範如何使用新 ExtGState。 + + + +## 接下來該學什麼? + +以下教學與本指南所示技術密切相關,能進一步延伸你的應用。每篇資源皆提供完整可執行的程式碼範例與逐步說明,協助你掌握更多 API 功能,並在自己的專案中探索替代實作方式。 + +- [如何在 PDF 中使用 Aspose.PDF for .NET 加入線條物件:逐步指南](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [使用 Aspose.PDF for .NET 為 PDF 加入影像印章:逐步指南](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [如何在 PDF 中使用 Aspose.PDF for .NET 加入影像:逐步指南](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hungarian/net/images-graphics/_index.md b/pdf/hungarian/net/images-graphics/_index.md index 7ba2ab708e..d5d85509c9 100644 --- a/pdf/hungarian/net/images-graphics/_index.md +++ b/pdf/hungarian/net/images-graphics/_index.md @@ -164,6 +164,9 @@ Ismerje meg, hogyan renderelhet összetett LaTeX szkripteket PDF dokumentumokká ### [Képhátterek beállítása PDF-ekben az Aspose.PDF for .NET használatával: Átfogó útmutató](./aspose-pdf-net-set-image-backgrounds/) Ismerje meg, hogyan javíthatja PDF-dokumentumait képhátterek beállításával az Aspose.PDF for .NET segítségével. Ez az útmutató a beállítással, a megvalósítással és az optimalizálással kapcsolatos tippeket tartalmazza. +### [ExtGState hozzáadása PDF-hez az Aspose.Pdf segítségével – Teljes útmutató](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Ismerje meg, hogyan adhat hozzá ExtGState objektumokat PDF-fájlokhoz az Aspose.Pdf használatával, részletes lépésekkel és C# példákkal. + ## További források - [Aspose.PDF a hálózati dokumentációhoz](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hungarian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/hungarian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..db71e96392 --- /dev/null +++ b/pdf/hungarian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Tanulja meg, hogyan adhat hozzá ExtGState-et a PDF-hez az Aspose.Pdf + segítségével. Ez a lépésről‑lépésre útmutató a grafikai állapot szótárát, a PDF + erőforrások szerkesztését és a keverési mód beállításait tárgyalja. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: hu +lastmod: 2026-07-07 +og_description: ExtGState hozzáadása PDF-hez az Aspose.Pdf használatával. Kövesse + ezt az útmutatót a PDF erőforrásainak módosításához, a grafikus állapot szótár létrehozásához, + az átlátszóság és keverési mód beállításához, majd az eredmény mentéséhez. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: ExtGState hozzáadása PDF-hez – Aspose.Pdf lépésről lépésre útmutató +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: ExtGState hozzáadása PDF-hez az Aspose.Pdf segítségével – Teljes útmutató +url: /hu/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# ExtGState hozzáadása PDF-hez – Teljes programozási útmutató + +Valaha is szükséged volt **ExtGState hozzáadására PDF-hez**, de nem tudtad, melyik API hívásokat kell használni? Nem vagy egyedül. Ebben az útmutatóban lépésről lépésre bemutatjuk a pontos eljárást a **Aspose.Pdf** segítségével, hogy módosítsuk az oldal erőforrásait, létrehozzunk egy egyedi **grafikus állapot szótárat**, és beállítsuk az átlátszóságot és a keverési módot – mindezt néhány C# sorban. + +Először betöltünk egy meglévő PDF-et, majd mélyebben megvizsgáljuk a **PDF erőforrásait**, beillesztünk egy új ExtGState bejegyzést, és végül elmentjük a módosított dokumentumot. A végére egy újrahasználható kódrészletet kapsz, amelyet bármely .NET projektbe beilleszthetsz, ha finomhangolt grafikai vezérlésre van szükség. + +## Amire szükséged lesz + +- .NET 6 (vagy bármely friss .NET Framework verzió) +- A **Aspose.Pdf for .NET** NuGet csomag (`Aspose.Pdf`) +- Egy bemeneti PDF (`input.pdf`), amelyet egy hivatkozható mappában helyezel el +- Alapvető C# szintaxis ismeret (nem szükséges a PDF belső működésének mély ismerete) + +Ha ezek megvannak, kezdjünk is bele. + +![ExtGState hozzáadása PDF-hez az Aspose.Pdf segítségével](placeholder.png){alt="ExtGState hozzáadása PDF-hez az Aspose.Pdf segítségével"} + +## 1. lépés: ExtGState hozzáadása PDF-hez – Dokumentum betöltése + +Az első dolog, amit meg kell tennünk, hogy megnyissuk a módosítani kívánt PDF-et. A `using` blokk használata biztosítja, hogy a fájlkezelő automatikusan felszabaduljon, ami különösen hasznos, ha később felülírjuk ugyanazt a fájlt. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Miért fontos:* A fájl betöltése hozzáférést biztosít a `Pages` gyűjteményhez, ahol minden oldal **PDF erőforrásai** találhatók. A dokumentum megnyitása nélkül nem érheted el az ExtGState szótárat. + +## 2. lépés: PDF erőforrások elérése az Aspose.Pdf segítségével + +Minden PDF oldalnak van egy `/Resources` szótára, amely a betűtípusokat, képeket és grafikus állapotokat tartalmazza. Meg kell szereznünk az első oldal erőforrásait, és egy `DictionaryEditor`-be kell csomagolnunk őket, hogy olvasni és írni tudjunk bejegyzéseket. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Pro tipp:* Ha a PDF több oldalt tartalmaz, és ugyanazt az ExtGState-et minden oldalon szükséges, iterálj a `pdfDocument.Pages`-en, és ismételd meg a következő lépéseket minden oldalra. + +## 3. lépés: Létező ExtGState szótár lekérése (vagy új létrehozása) + +A `/ExtGState` bejegyzés már létezhet. Lekérjük, hogy egy egyedi kulcs alatt hozzáadhassuk az új grafikus állapotot. Ha nem létezik, az Aspose.Pdf hibát dob, ezért ezt elkerüljük egy új szótár létrehozásával, ha szükséges. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Mi történik:* A `resourcesEditor["ExtGState"]` egy COS objektumot ad vissza; a `ToCosPdfDictionary()` hívás egy módosítható szótárrá alakítja, amelyhez bejegyzéseket fűzhetünk. + +## 4. lépés: Grafikus állapot szótár létrehozása a kívánt paraméterekkel + +Most jön a tutorial középpontja: egy **grafikus állapot szótár** felépítése, amely meghatározza a vonal átlátszóságát (`CA`), a kitöltés átlátszóságát (`ca`) és a keverési módot (`BM`). Ezek a kulcsok a PDF specifikációjának megfelelően az ExtGState bejegyzésekhez tartoznak. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Miért állítjuk be ezeket:* +- **CA** és **ca** lehetővé teszi, hogy szabályozd, hogyan keverednek a tinták az oldal háttérével – tökéletes vízjelhez vagy félig átlátszó átfedésekhez. +- **BM** (Blend Mode) meghatározza, hogyan kombinálódnak a forrás- és célszínek; az alapértelmezett a `"Normal"`, de kreatív hatásokhoz válthatsz `"Multiply"` vagy `"Screen"` módra. + +## 5. lépés: Új ExtGState beillesztése az oldal erőforrásaiba + +Az új grafikus állapotnak nevet adunk (`GS0`), és beillesztjük az oldal ExtGState szótárába. Ettől kezdve minden olyan tartalmi áram, amely `/GS0`-ra hivatkozik, örökölni fogja a most beállított átlátszóságot és keverési módot. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Különleges eset megjegyzés:* Ha a `GS0` már létezik, az Aspose.Pdf felülírja. Az esetleges ütközések elkerülése érdekében érdemes GUID‑alapú nevet generálni, például `"GS_" + Guid.NewGuid().ToString("N")`. + +## 6. lépés: Módosított PDF mentése + +Végül visszaírjuk a változtatásokat a lemezre. Felülírhatod az eredeti fájlt, vagy létrehozhatsz egy új másolatot – attól függően, mi illik a munkafolyamatodhoz. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Mit várhatsz:* Nyisd meg az `output.pdf`-et bármely PDF-olvasóban. Bármely rajzoló parancs, amely később `GS0`-ra hivatkozik, most 50 % kitöltési átlátszósággal és teljes vonal átlátszósággal, a normál keverési móddal fog megjelenni. + +--- + +## Bónusz: Új ExtGState alkalmazása egy tartalmi áramon + +Az ExtGState szótár hozzáadása önmagában nem elegendő; meg kell mondanod a PDF tartalmi áramnak, hogy használja. Íme egy gyors kódrészlet, amely félig átlátszó téglalapot rajzol a most létrehozott állapottal: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Magyarázat:* +- A `q`/`Q` a grafikus állapot veremét tolja fel és le, biztosítva, hogy a módosításaink ne szivárogjanak más elemekre. +- A `/GS0 gs` kiválasztja a hozzáadott grafikus állapotot. +- A `re` operátor téglalapot rajzol, a `B` pedig kitölti és körvonalazza azt a meghatározott átlátszósággal. + +Nyugodtan módosítsd a téglalap koordinátáit, színeit, vagy akár cseréld le a formát szövegre – bármely rajzoló parancs most már figyelembe veszi az ExtGState beállításokat. + +## Gyakori hibák és hogyan kerüld el őket + +| Probléma | Miért fordul elő | Megoldás | +|----------|------------------|----------| +| **Hiányzó `/ExtGState` bejegyzés** | Néhány PDF soha nem definiálja a szótárat. | Ellenőrizd a `resourcesEditor.ContainsKey("ExtGState")`-t a hozzáférés előtt; ha hamis, hozz létre egy új üres szótárat, és add hozzá a `resourcesEditor`-hez. | +| **Az átlátszóság nem alkalmazódik** | A tartalmi áram soha nem hivatkozik az új állapotra. | Illeszd be a `/GS0 gs`-t minden olyan rajzoló parancs előtt, amelyet érinteni szeretnél. | +| **A keverési mód figyelmen kívül marad** | A megjelenítő nem támogat bizonyos keverési módokat. | Tartsd magad a széles körben támogatott módokhoz, mint a `"Normal"` vagy a `"Multiply"` a legnagyobb kompatibilitás érdekében. | +| **Több oldalnak ugyanaz az állapot kell** | Csak az első oldalt szerkesztettük. | Iterálj a `pdfDocument.Pages`-en, és ismételd meg a 2‑5. lépéseket minden oldalra. | + +## Teljes működő példa + +Alább megtalálod a teljes, másolásra kész programot, amely tartalmazza az összes lépést, a hibakezelést, és egy bemutatót az új ExtGState használatáról. + + + +## Mit tanulj meg legközelebb? + +A következő útmutatók szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás teljes működő kódrészleteket tartalmaz lépésről lépésre magyarázatokkal, hogy segítsenek elsajátítani további API funkciókat és alternatív megvalósítási megközelítéseket a saját projektjeidben. + +- [Hogyan adjunk hozzá egy vonal objektumot PDF-hez az Aspose.PDF for .NET használatával: Lépésről lépésre útmutató](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Képmásolatok hozzáadása PDF-ekhez az Aspose.PDF for .NET használatával: Lépésről lépésre útmutató](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Hogyan adjunk hozzá képeket PDF-ekhez az Aspose.PDF for .NET használatával: Lépésről lépésre útmutató](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/indonesian/net/images-graphics/_index.md b/pdf/indonesian/net/images-graphics/_index.md index a30e79dc12..319a7e6dda 100644 --- a/pdf/indonesian/net/images-graphics/_index.md +++ b/pdf/indonesian/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Pelajari cara membuat dokumen PDF yang menarik secara visual dengan mengekstrak ### [Menggambar Bentuk Transparan dalam PDF dengan Aspose.PDF .NET](./draw-transparent-shapes-aspose-pdf-net/) Tutorial kode untuk Aspose.PDF Net +### [Menambahkan ExtGState ke PDF dengan Aspose.Pdf – Panduan Lengkap](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Pelajari cara menambahkan ExtGState untuk mengatur transparansi, blending, dan efek lainnya pada PDF menggunakan Aspose.Pdf dalam panduan lengkap ini. + ### [Identifikasi Gambar PDF yang Efisien dengan Aspose.PDF untuk .NET](./master-image-identification-aspose-pdf-net/) Pelajari cara mengidentifikasi gambar skala abu-abu dan RGB dalam PDF menggunakan Aspose.PDF untuk .NET. Tutorial ini mencakup kiat penginstalan, ekstraksi gambar, dan performa. diff --git a/pdf/indonesian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/indonesian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..f3a3f21558 --- /dev/null +++ b/pdf/indonesian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Pelajari cara menambahkan ExtGState ke PDF menggunakan Aspose.Pdf. Panduan + langkah demi langkah ini mencakup kamus keadaan grafik, penyuntingan sumber daya + PDF, dan pengaturan mode campuran. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: id +lastmod: 2026-07-07 +og_description: Tambahkan ExtGState ke PDF menggunakan Aspose.Pdf. Ikuti panduan ini + untuk memodifikasi sumber daya PDF, membuat kamus keadaan grafis, mengatur opasitas + dan mode pencampuran, serta menyimpan hasilnya. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: Tambahkan ExtGState ke PDF – Tutorial Langkah demi Langkah Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Menambahkan ExtGState ke PDF dengan Aspose.Pdf – Panduan Lengkap +url: /id/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Menambahkan ExtGState ke PDF – Panduan Pemrograman Lengkap + +Pernah perlu **menambahkan ExtGState ke PDF** tetapi tidak yakin panggilan API mana yang harus digunakan? Anda tidak sendirian. Dalam tutorial ini kami akan membahas langkah‑langkah tepat menggunakan **Aspose.Pdf** untuk menyesuaikan sumber daya halaman, membuat **kamus keadaan grafik** khusus, dan mengatur opacity serta blend mode—semua dalam beberapa baris C# saja. + +Kami akan memulai dengan memuat PDF yang ada, kemudian menyelami **sumber daya PDF**‑nya, menyisipkan entri ExtGState baru, dan akhirnya menyimpan dokumen yang telah dimodifikasi. Pada akhir tutorial Anda akan memiliki potongan kode yang dapat digunakan kembali dan dapat dimasukkan ke dalam proyek .NET mana pun yang membutuhkan kontrol grafik yang halus. + +## Apa yang Anda Butuhkan + +- .NET 6 (atau versi .NET Framework terbaru apa pun) +- Paket NuGet **Aspose.Pdf for .NET** (`Aspose.Pdf`) +- PDF input (`input.pdf`) yang ditempatkan di folder yang dapat Anda referensikan +- Pemahaman dasar tentang sintaks C# (tidak memerlukan pengetahuan mendalam tentang internal PDF) + +Jika Anda sudah memiliki semua itu, mari kita mulai. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Menambahkan ExtGState ke PDF menggunakan Aspose.Pdf"} + +## Langkah 1: Menambahkan ExtGState ke PDF – Memuat Dokumen + +Hal pertama yang harus kita lakukan adalah membuka PDF yang ingin dimodifikasi. Menggunakan blok `using` memastikan pegangan file dilepaskan secara otomatis, yang sangat berguna ketika Anda nanti menimpa file yang sama. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Mengapa ini penting:* Memuat file memberi Anda akses ke koleksi `Pages`, tempat **sumber daya PDF** tiap halaman berada. Tanpa membuka dokumen, Anda tidak dapat mengubah kamus ExtGState. + +## Langkah 2: Mengakses Sumber Daya PDF dengan Aspose.Pdf + +Setiap halaman dalam PDF memiliki kamus `/Resources` yang berisi font, gambar, dan keadaan grafik. Kita perlu mengambil sumber daya halaman pertama dan membungkusnya dalam `DictionaryEditor` agar dapat membaca dan menulis entri. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Tip profesional:* Jika PDF Anda memiliki banyak halaman dan Anda memerlukan ExtGState yang sama pada semua halaman, lakukan perulangan pada `pdfDocument.Pages` dan ulangi langkah‑langkah berikut untuk setiap halaman. + +## Langkah 3: Mengambil Kamus ExtGState yang Ada (atau Membuat Baru) + +Entri `/ExtGState` mungkin sudah ada. Kami mengambilnya agar dapat menambahkan keadaan grafik baru di bawah kunci unik. Jika tidak ada, Aspose.Pdf akan melempar pengecualian, sehingga kami melindungi dengan membuat kamus baru bila diperlukan. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Apa yang terjadi:* `resourcesEditor["ExtGState"]` mengembalikan objek COS; memanggil `ToCosPdfDictionary()` mengubahnya menjadi kamus yang dapat diubah yang dapat kami tambahkan entri. + +## Langkah 4: Membuat Kamus Graphics‑State dengan Parameter yang Diinginkan + +Sekarang masuk ke inti tutorial: membangun **kamus graphics state** yang mendefinisikan opacity garis (`CA`), opacity isi (`ca`), dan blend mode (`BM`). Kunci‑kunci ini mengikuti spesifikasi PDF untuk entri ExtGState. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Mengapa kami mengatur ini:* +- **CA** dan **ca** memungkinkan Anda mengontrol bagaimana tinta bercampur dengan latar belakang halaman—sempurna untuk watermark atau lapisan semi‑transparan. +- **BM** (Blend Mode) menentukan bagaimana warna sumber dan tujuan digabungkan; `"Normal"` adalah default, tetapi Anda dapat beralih ke `"Multiply"` atau `"Screen"` untuk efek kreatif. + +## Langkah 5: Menyisipkan ExtGState Baru ke dalam Sumber Daya Halaman + +Kami memberi keadaan grafik baru kami sebuah nama (`GS0`) dan menempelkannya ke dalam kamus ExtGState halaman. Mulai sekarang, setiap aliran konten yang merujuk ke `/GS0` akan mewarisi opacity dan blend mode yang baru saja kami definisikan. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Catatan kasus khusus:* Jika `GS0` sudah ada, Aspose.Pdf akan menimpanya. Untuk menghindari tabrakan tidak sengaja, pertimbangkan menghasilkan nama berbasis GUID seperti `"GS_" + Guid.NewGuid().ToString("N")`. + +## Langkah 6: Menyimpan PDF yang Dimodifikasi + +Akhirnya, kami menulis perubahan kembali ke disk. Anda dapat menimpa file asli atau menghasilkan salinan baru—sesuai dengan alur kerja Anda. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Apa yang diharapkan:* Buka `output.pdf` di penampil PDF apa pun. Perintah menggambar apa pun yang kemudian merujuk ke `GS0` kini akan dirender dengan opacity isi 50 % dan opacity garis penuh, menggunakan blend mode normal. + +--- + +## Bonus: Menerapkan ExtGState Baru dalam Aliran Konten + +Menambahkan kamus ExtGState saja tidak cukup; Anda harus memberi tahu aliran konten PDF untuk menggunakannya. Berikut cuplikan singkat yang menggambar persegi panjang semi‑transparan menggunakan keadaan yang baru saja kami buat: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Penjelasan:* +- `q`/`Q` menambahkan dan mengeluarkan stack keadaan grafik, memastikan perubahan kami tidak bocor ke elemen lain. +- `/GS0 gs` memilih keadaan grafik yang kami tambahkan. +- Operator `re` menggambar persegi panjang, dan `B` mengisi serta memberi garis tepi menggunakan opacity yang telah ditentukan. + +Silakan ubah koordinat persegi panjang, warna, atau bahkan ganti bentuk dengan teks—setiap perintah menggambar kini akan menghormati pengaturan ExtGState. + +## Kesalahan Umum & Cara Menghindarinya + +| Masalah | Mengapa Terjadi | Solusi | +|-------|----------------|-----| +| **Entri `/ExtGState` Hilang** | Beberapa PDF tidak pernah mendefinisikan kamus tersebut. | Periksa `resourcesEditor.ContainsKey("ExtGState")` sebelum mengakses; jika false, buat kamus kosong baru dan tambahkan ke `resourcesEditor`. | +| **Opacity tidak diterapkan** | Aliran konten tidak pernah merujuk ke keadaan baru. | Sisipkan `/GS0 gs` sebelum perintah menggambar apa pun yang ingin dipengaruhi. | +| **Blend mode diabaikan** | Penampil tidak mendukung blend mode tertentu. | Gunakan mode yang didukung luas seperti `"Normal"` atau `"Multiply"` untuk kompatibilitas maksimal. | +| **Beberapa halaman membutuhkan keadaan yang sama** | Hanya halaman pertama yang diedit. | Lakukan perulangan pada `pdfDocument.Pages` dan ulangi langkah 2‑5 untuk setiap halaman. | + +## Contoh Lengkap yang Berfungsi + +Berikut adalah program lengkap yang siap disalin‑tempel yang mencakup semua langkah, penanganan error, dan demonstrasi penggunaan ExtGState baru. + + + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik terkait yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber daya menyertakan contoh kode lengkap yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan mengeksplorasi pendekatan implementasi alternatif dalam proyek Anda. + +- [Cara Menambahkan Objek Garis dalam PDF Menggunakan Aspose.PDF untuk .NET: Panduan Langkah demi Langkah](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Menambahkan Stempel Gambar ke PDF Menggunakan Aspose.PDF untuk .NET: Panduan Langkah demi Langkah](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Cara Menambahkan Gambar ke PDF Menggunakan Aspose.PDF untuk .NET: Panduan Langkah demi Langkah](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/italian/net/images-graphics/_index.md b/pdf/italian/net/images-graphics/_index.md index c05bef3bf9..f3b70e1438 100644 --- a/pdf/italian/net/images-graphics/_index.md +++ b/pdf/italian/net/images-graphics/_index.md @@ -164,6 +164,9 @@ Scopri come trasformare script LaTeX complessi in documenti PDF utilizzando Aspo ### [Impostare gli sfondi delle immagini nei PDF utilizzando Aspose.PDF per .NET: una guida completa](./aspose-pdf-net-set-image-backgrounds/) Scopri come migliorare i tuoi documenti PDF impostando sfondi con immagini utilizzando Aspose.PDF per .NET. Questa guida include suggerimenti per la configurazione, l'implementazione e l'ottimizzazione. +### [Aggiungere ExtGState a PDF con Aspose.Pdf – Guida completa](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Scopri come utilizzare ExtGState per gestire trasparenza ed effetti grafici nei PDF con Aspose.Pdf in C#. + ## Risorse aggiuntive - [Aspose.PDF per la documentazione di rete](https://docs.aspose.com/pdf/net/) diff --git a/pdf/italian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/italian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..69546242b4 --- /dev/null +++ b/pdf/italian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Scopri come aggiungere ExtGState a un PDF usando Aspose.Pdf. Questa guida + passo‑passo copre il dizionario dello stato grafico, la modifica delle risorse PDF + e le impostazioni della modalità di fusione. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: it +lastmod: 2026-07-07 +og_description: Aggiungi ExtGState al PDF usando Aspose.Pdf. Segui questa guida per + modificare le risorse del PDF, creare un dizionario di stato grafico, impostare + l'opacità e la modalità di fusione e salvare il risultato. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: Aggiungi ExtGState al PDF – Tutorial passo passo di Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Aggiungi ExtGState al PDF con Aspose.Pdf – Guida completa +url: /it/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aggiungere ExtGState a PDF – Guida completa di programmazione + +Hai mai avuto bisogno di **aggiungere ExtGState a PDF** ma non eri sicuro di quali chiamate API utilizzare? Non sei solo. In questo tutorial percorreremo i passaggi esatti usando **Aspose.Pdf** per modificare le risorse della pagina, creare un **graphics state dictionary** personalizzato e impostare opacità e modalità di fusione—tutto in poche righe di C#. + +Inizieremo caricando un PDF esistente, poi approfondiremo le sue **PDF resources**, inseriremo una nuova voce ExtGState e infine salveremo il documento modificato. Alla fine avrai uno snippet riutilizzabile da inserire in qualsiasi progetto .NET che richieda un controllo grafico fine. + +## Cosa ti servirà + +- .NET 6 (o qualsiasi versione recente del .NET Framework) +- Il pacchetto NuGet **Aspose.Pdf for .NET** (`Aspose.Pdf`) +- Un PDF di input (`input.pdf`) posizionato in una cartella a cui puoi fare riferimento +- Una conoscenza di base della sintassi C# (non è necessario conoscere a fondo le internals dei PDF) + +Se li hai, mettiamoci al lavoro. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Aggiungere ExtGState a PDF usando Aspose.Pdf"} + +## Passo 1: Aggiungere ExtGState a PDF – Caricare il documento + +La prima cosa da fare è aprire il PDF che vogliamo modificare. L'uso di un blocco `using` garantisce che il handle del file venga rilasciato automaticamente, il che è particolarmente comodo quando in seguito sovrascrivi lo stesso file. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Perché è importante:* Caricare il file ti dà accesso alla collezione `Pages`, dove vivono le **PDF resources** di ogni pagina. Senza aprire il documento non puoi toccare il dizionario ExtGState. + +## Passo 2: Accedere alle risorse PDF con Aspose.Pdf + +Ogni pagina di un PDF ha un dizionario `/Resources` che contiene font, immagini e stati grafici. Dobbiamo prelevare le risorse della prima pagina e avvolgerle in un `DictionaryEditor` così da poter leggere e scrivere le voci. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Consiglio professionale:* Se il tuo PDF ha più pagine e ti serve lo stesso ExtGState su tutte, itera su `pdfDocument.Pages` e ripeti i passaggi seguenti per ogni pagina. + +## Passo 3: Recuperare il dizionario ExtGState esistente (o crearne uno) + +La voce `/ExtGState` potrebbe già esistere. La recuperiamo così da poter aggiungere il nostro nuovo graphics state sotto una chiave unica. Se non esiste, Aspose.Pdf lancerà un'eccezione, quindi la gestiamo creando un nuovo dizionario quando necessario. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Cosa sta succedendo:* `resourcesEditor["ExtGState"]` restituisce un oggetto COS; chiamare `ToCosPdfDictionary()` lo converte in un dizionario mutabile a cui possiamo aggiungere voci. + +## Passo 4: Costruire un dizionario Graphics‑State con i parametri desiderati + +Ora arriva il cuore del tutorial: costruire un **graphics state dictionary** che definisce l'opacità del tratto (`CA`), l'opacità di riempimento (`ca`) e la modalità di fusione (`BM`). Queste chiavi seguono la specifica PDF per le voci ExtGState. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Perché impostiamo questi valori:* +- **CA** e **ca** ti permettono di controllare come gli inchiostri si fondono con lo sfondo della pagina—perfetto per filigrane o sovrapposizioni semi‑trasparenti. +- **BM** (Blend Mode) determina come i colori sorgente e destinazione si combinano; `"Normal"` è il valore predefinito, ma puoi passare a `"Multiply"` o `"Screen"` per effetti creativi. + +## Passo 5: Inserire il nuovo ExtGState nelle risorse della pagina + +Diamo al nostro nuovo graphics state un nome (`GS0`) e lo inseriamo nel dizionario ExtGState della pagina. Da ora in poi, qualsiasi stream di contenuto che faccia riferimento a `/GS0` erediterà l'opacità e la modalità di fusione appena definite. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Nota su casi limite:* Se `GS0` esiste già, Aspose.Pdf lo sovrascriverà. Per evitare collisioni accidentali, considera di generare un nome basato su GUID come `"GS_" + Guid.NewGuid().ToString("N")`. + +## Passo 6: Salvare il PDF modificato + +Infine, scriviamo le modifiche su disco. Puoi sovrascrivere il file originale o generare una nuova copia—come preferisci per il tuo flusso di lavoro. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Cosa aspettarsi:* Apri `output.pdf` in qualsiasi visualizzatore PDF. Qualsiasi comando di disegno che in seguito faccia riferimento a `GS0` verrà renderizzato con il 50 % di opacità di riempimento e opacità di tratto completa, usando la modalità di fusione normale. + +--- + +## Bonus: Applicare il nuovo ExtGState in uno stream di contenuto + +Aggiungere solo il dizionario ExtGState non è sufficiente; devi far sì che lo stream di contenuto PDF lo utilizzi. Ecco uno snippet rapido che disegna un rettangolo semi‑trasparente usando lo stato appena creato: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Spiegazione:* +- `q`/`Q` spingono e poppano lo stack dello stato grafico, garantendo che le nostre modifiche non trapelino ad altri elementi. +- `/GS0 gs` seleziona lo stato grafico che abbiamo aggiunto. +- L'operatore `re` disegna un rettangolo, e `B` lo riempie e lo traccia usando l'opacità definita. + +Sentiti libero di modificare le coordinate del rettangolo, i colori o persino sostituire la forma con del testo—qualsiasi comando di disegno ora rispetterà le impostazioni ExtGState. + +## Problemi comuni e come evitarli + +| Problema | Perché accade | Soluzione | +|----------|----------------|-----------| +| **Manca la voce `/ExtGState`** | Alcuni PDF non definiscono mai il dizionario. | Controlla `resourcesEditor.ContainsKey("ExtGState")` prima di accedere; se è false, crea un nuovo dizionario vuoto e aggiungilo a `resourcesEditor`. | +| **Opacità non applicata** | Lo stream di contenuto non fa mai riferimento al nuovo stato. | Inserisci `/GS0 gs` prima di qualsiasi comando di disegno che vuoi influenzare. | +| **Modalità di fusione ignorata** | Il visualizzatore non supporta certe modalità di fusione. | Usa modalità ampiamente supportate come `"Normal"` o `"Multiply"` per la massima compatibilità. | +| **Più pagine necessitano dello stesso stato** | È stata modificata solo la prima pagina. | Itera su `pdfDocument.Pages` e ripeti i passaggi 2‑5 per ogni pagina. | + +## Esempio completo funzionante + +Di seguito trovi il programma completo, pronto per il copia‑incolla, che incorpora tutti i passaggi, la gestione degli errori e una dimostrazione dell'uso del nuovo ExtGState. + + + +## Cosa dovresti imparare dopo? + +I tutorial seguenti trattano argomenti strettamente correlati che si basano sulle tecniche dimostrate in questa guida. Ogni risorsa include esempi di codice completi con spiegazioni passo‑passo per aiutarti a padroneggiare funzionalità API aggiuntive ed esplorare approcci di implementazione alternativi nei tuoi progetti. + +- [Come aggiungere un oggetto Linea in PDF usando Aspose.PDF per .NET: Guida passo‑passo](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Aggiungere timbri immagine a PDF usando Aspose.PDF per .NET: Guida passo‑passo](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Come aggiungere immagini a PDF usando Aspose.PDF per .NET: Guida passo‑passo](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/japanese/net/images-graphics/_index.md b/pdf/japanese/net/images-graphics/_index.md index e19b9d0ae8..b6d8ccc16e 100644 --- a/pdf/japanese/net/images-graphics/_index.md +++ b/pdf/japanese/net/images-graphics/_index.md @@ -164,6 +164,9 @@ Aspose.PDF for .NET を使用してPDFドキュメント内の画像を圧縮・ ### [Aspose.PDF for .NET を使用して PDF に画像の背景を設定する: 包括的なガイド](./aspose-pdf-net-set-image-backgrounds/) Aspose.PDF for .NET を使用して画像背景を設定し、PDFドキュメントの魅力を高める方法を学びましょう。このガイドでは、セットアップ、実装、最適化のヒントを解説します。 +### [Aspose.Pdf を使用して PDF に ExtGState を追加する: 完全ガイド](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Aspose.Pdf の ExtGState 機能を活用し、PDF の透明度やブレンドモードなど高度な描画設定を追加する方法をステップバイステップで解説します。 + ## 追加リソース - [Aspose.PDF for Net ドキュメント](https://docs.aspose.com/pdf/net/) diff --git a/pdf/japanese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/japanese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..b0457c82aa --- /dev/null +++ b/pdf/japanese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,192 @@ +--- +category: general +date: 2026-07-07 +description: Aspose.Pdf を使用して PDF に ExtGState を追加する方法を学びましょう。このステップバイステップガイドでは、グラフィックス状態辞書、PDF + リソースの編集、ブレンドモード設定について解説します。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: ja +lastmod: 2026-07-07 +og_description: Aspose.Pdf を使用して PDF に ExtGState を追加します。このガイドに従って PDF リソースを変更し、グラフィックスステート辞書を作成し、不透明度とブレンドモードを設定し、結果を保存してください。 +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: PDFにExtGStateを追加 – Aspose.Pdf ステップバイステップチュートリアル +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Aspose.PdfでPDFにExtGStateを追加する – 完全ガイド +url: /ja/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF に ExtGState を追加 – 完全プログラミング解説 + +**ExtGState を PDF に追加**したいけど、どの API 呼び出しを使えばいいか分からない…という経験はありませんか?このチュートリアルでは、**Aspose.Pdf** を使ってページリソースを操作し、カスタム **graphics state dictionary** を作成し、透明度とブレンドモードを設定する手順を数行の C# で解説します。 + +既存の PDF を読み込み、**PDF リソース**に新しい ExtGState エントリを注入し、最後に変更したドキュメントを保存します。最後まで読めば、細かいグラフィック制御が必要な任意の .NET プロジェクトにすぐ貼り付けられる再利用可能なコードスニペットが手に入ります。 + +## 必要な環境 + +- .NET 6(または最近の .NET Framework バージョン) +- **Aspose.Pdf for .NET** NuGet パッケージ (`Aspose.Pdf`) +- フォルダー内に配置した入力 PDF(`input.pdf`) +- C# の基本的な文法理解(PDF の内部構造を深く知る必要はありません) + +これらが揃ったら、さっそく始めましょう。 + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Add ExtGState to PDF using Aspose.Pdf"} + +## 手順 1: ExtGState を PDF に追加 – ドキュメントを読み込む + +最初に行うべきことは、変更したい PDF を開くことです。`using` ブロックを使うと、ファイルハンドルが自動的に解放されるため、後で同じファイルを上書きする際に便利です。 + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*ポイント:* ファイルを読み込むことで `Pages` コレクションにアクセスでき、各ページの **PDF リソース** が取得可能になります。ドキュメントを開かないと ExtGState 辞書に手を加えることはできません。 + +## 手順 2: Aspose.Pdf で PDF リソースにアクセス + +PDF の各ページにはフォント、画像、グラフィックステートなどを保持する `/Resources` 辞書があります。最初のページのリソースを取得し、`DictionaryEditor` でラップしてエントリの読み書きを行います。 + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*プロのコツ:* PDF に複数ページがあり、すべてに同じ ExtGState を適用したい場合は、`pdfDocument.Pages` をループし、各ページで以下の手順を繰り返してください。 + +## 手順 3: 既存の ExtGState 辞書を取得(または作成) + +`/ExtGState` エントリは既に存在する場合があります。新しいグラフィックステートをユニークなキーで追加できるよう、まず取得します。存在しない場合は例外がスローされるため、必要に応じて新しい辞書を作成して対処します。 + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*何が起きているか:* `resourcesEditor["ExtGState"]` は COS オブジェクトを返し、`ToCosPdfDictionary()` を呼び出すことで可変な辞書に変換し、エントリを追加できるようになります。 + +## 手順 4: 必要なパラメータで Graphics‑State 辞書を構築 + +ここがチュートリアルの核心です。**graphics state dictionary** を作成し、ストローク透明度 (`CA`)、塗りつぶし透明度 (`ca`)、ブレンドモード (`BM`) を定義します。これらのキーは ExtGState エントリの PDF 仕様に従っています。 + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*設定理由:* +- **CA** と **ca** はインクがページ背景とどのようにブレンドされるかを制御し、透かしや半透明オーバーレイに最適です。 +- **BM**(Blend Mode)はソースとデスティネーションの色の合成方法を決めます。デフォルトは `"Normal"` ですが、クリエイティブな効果を狙うなら `"Multiply"` や `"Screen"` も選べます。 + +## 手順 5: 新しい ExtGState をページリソースに挿入 + +作成したグラフィックステートに名前(例: `GS0`)を付け、ページの ExtGState 辞書に追加します。以後、コンテンツストリームが `/GS0` を参照すれば、先ほど設定した透明度とブレンドモードが適用されます。 + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*エッジケース:* `GS0` が既に存在する場合、Aspose.Pdf は上書きします。衝突を防ぎたいときは、`"GS_" + Guid.NewGuid().ToString("N")` のように GUID ベースの名前を生成すると安全です。 + +## 手順 6: 変更後の PDF を保存 + +最後に、変更をディスクに書き戻します。元のファイルを上書きしても、別名で保存しても構いません。作業フローに合わせて選んでください。 + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*期待結果:* 任意の PDF ビューアで `output.pdf` を開くと、後続の描画コマンドが `GS0` を参照した場合、塗りつぶし透明度 50 %・ストローク透明度 100 %・ノーマルブレンドモードで描画されます。 + +--- + +## ボーナス: コンテンツストリームで新しい ExtGState を使用する + +ExtGState 辞書だけを追加しても不十分です。PDF のコンテンツストリームでそれを使用する指示が必要です。以下は、先ほど作成したステートを使って半透明の矩形を描く簡単なスニペットです。 + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*解説:* +- `q`/`Q` はグラフィックステートスタックをプッシュ/ポップし、変更が他の要素に漏れないようにします。 +- `/GS0 gs` で追加したグラフィックステートを選択。 +- `re` 演算子で矩形を描き、`B` で塗りつぶしとストロークを同時に実行し、設定した透明度が適用されます。 + +矩形の座標や色、あるいは形状をテキストに置き換えても構いません。任意の描画コマンドが ExtGState 設定を尊重します。 + +## よくある落とし穴と回避策 + +| 問題 | 発生理由 | 対策 | +|------|----------|------| +| **`/ExtGState` エントリが欠如** | 一部の PDF では辞書自体が定義されていない | `resourcesEditor.ContainsKey("ExtGState")` をチェックし、false の場合は空の辞書を作成して `resourcesEditor` に追加 | +| **透明度が適用されない** | コンテンツストリームが新しいステートを参照していない | 描画コマンドの前に必ず `/GS0 gs` を挿入 | +| **ブレンドモードが無視される** | ビューアが特定のブレンドモードに対応していない | 互換性の高い `"Normal"` や `"Multiply"` などのモードを使用 | +| **複数ページで同じステートが必要** | 最初のページだけが編集された | `pdfDocument.Pages` をループし、手順 2‑5 を各ページで実行 | + +## 完全動作サンプル + +以下は、すべての手順・エラーハンドリング・ExtGState の使用例を組み込んだ、コピー&ペーストで動作する完全プログラムです。 + + + +## 次に学ぶべきこと + +以下のチュートリアルは、本ガイドで示したテクニックを応用した関連トピックを扱っています。各リソースには、ステップバイステップの解説と完全動作サンプルが含まれているので、API のさらなる機能習得や代替実装の検討に役立ちます。 + +- [How to Add a Line Object in PDF Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [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 Images to PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/korean/net/images-graphics/_index.md b/pdf/korean/net/images-graphics/_index.md index 95294a4a75..222e0aae5e 100644 --- a/pdf/korean/net/images-graphics/_index.md +++ b/pdf/korean/net/images-graphics/_index.md @@ -141,28 +141,24 @@ Aspose.PDF for .NET을 사용하여 PDF에서 페이지 크기를 추출하고 Aspose.PDF for .NET을 사용하여 PDF의 크기를 효율적으로 조정하고, 압축하고, 이미지 품질을 조절하는 방법을 알아보세요. 문서 성능과 사용자 경험을 개선해 보세요. ### [Aspose.PDF .NET을 사용하여 PDF에서 그래픽을 제거하는 방법: 완전한 가이드](./remove-graphics-aspose-pdf-net/) -Aspose.PDF for .NET을 사용하여 PDF에서 그래픽을 효율적으로 제거하는 방법을 알아보세요. 이 단계별 가이드를 따라 문서를 정리하고 파일 크기를 최적화하세요. +Aspose.PDF .NET을 사용하여 PDF에서 그래픽을 효율적으로 제거하는 방법을 알아보세요. 이 단계별 가이드를 따라 문서를 정리하고 파일 크기를 최적화하세요. + +### [Aspose.Pdf를 사용하여 PDF에 ExtGState 추가 – 완전 가이드](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Aspose.Pdf를 활용해 PDF에 ExtGState를 적용하고 투명도 및 혼합 모드를 제어하는 방법을 단계별로 안내합니다. ### [Aspose.PDF .NET을 사용하여 PDF의 이미지를 바꾸는 방법: 개발자 가이드](./replace-images-pdf-aspose-net-guide/) -Aspose.PDF for .NET을 사용하여 PDF 문서의 이미지를 효율적으로 바꾸는 방법을 알아보세요. 이 포괄적인 개발자 가이드를 통해 문서 업데이트를 간소화하세요. -### [Aspose.PDF for .NET을 사용하여 PDF의 이미지를 바꾸는 방법: 완전한 가이드](./replace-images-aspose-pdf-net-tutorial/) -Aspose.PDF for .NET을 사용하여 PDF 문서의 이미지를 효율적으로 바꾸는 방법을 알아보세요. 이 종합 가이드에서는 설정, 구현 및 실제 적용 사례를 다룹니다. +### [Aspose.PDF .NET을 사용하여 PDF의 이미지를 바꾸는 방법: 완전한 가이드](./replace-images-aspose-pdf-net-tutorial/) ### [Aspose.PDF for .NET을 사용하여 PDF의 이미지 크기를 설정하는 방법](./set-image-size-pdf-aspose-dotnet/) -Aspose.PDF for .NET을 사용하여 PDF의 이미지 크기를 조정하는 방법을 알아보세요. 전문적인 문서와 프레젠테이션을 만드는 데 적합합니다. ### [Aspose.PDF for .NET을 사용하여 PDF 이미지 배치 마스터하기](./optimize-image-placement-aspose-pdf-net/) -Aspose.PDF for .NET을 사용하여 PDF 문서의 이미지 배치를 최적화하는 방법을 알아보세요. 실용적인 가이드를 통해 문서 품질과 효율성을 향상하세요. ### [Aspose.PDF for .NET을 사용하여 PDF 이미지 최적화: 포괄적인 가이드](./optimize-pdf-images-aspose-pdf-dotnet/) -Aspose.PDF for .NET을 사용하여 PDF 문서의 이미지를 압축하고 최적화하는 방법을 알아보세요. 파일 크기는 줄이면서 품질은 유지합니다. 개발자와 문서 관리자에게 적합합니다. ### [Aspose.PDF .NET을 사용하여 PDF에서 LaTeX 렌더링: 단계별 가이드](./render-latex-aspose-pdf-net-guide/) -Aspose.PDF for .NET을 사용하여 복잡한 LaTeX 스크립트를 PDF 문서로 렌더링하는 방법을 알아보세요. 여기에는 설정, 구현 및 최적화 팁이 포함됩니다. ### [Aspose.PDF for .NET을 사용하여 PDF에 이미지 배경 설정: 포괄적인 가이드](./aspose-pdf-net-set-image-backgrounds/) -Aspose.PDF for .NET을 사용하여 이미지 배경을 설정하여 PDF 문서를 개선하는 방법을 알아보세요. 이 가이드에서는 설정, 구현 및 최적화 팁을 다룹니다. ## 추가 자료 diff --git a/pdf/korean/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/korean/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..661ca82cdb --- /dev/null +++ b/pdf/korean/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,193 @@ +--- +category: general +date: 2026-07-07 +description: Aspose.Pdf를 사용하여 PDF에 ExtGState를 추가하는 방법을 배워보세요. 이 단계별 가이드는 그래픽 상태 사전, + PDF 리소스 편집 및 블렌드 모드 설정을 다룹니다. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: ko +lastmod: 2026-07-07 +og_description: Aspose.Pdf를 사용하여 PDF에 ExtGState를 추가합니다. 이 가이드를 따라 PDF 리소스를 수정하고, 그래픽 + 상태 사전을 생성하며, 불투명도와 블렌드 모드를 설정하고, 결과를 저장하십시오. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: PDF에 ExtGState 추가 – Aspose.Pdf 단계별 튜토리얼 +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Aspose.Pdf를 사용하여 PDF에 ExtGState 추가 – 완전 가이드 +url: /ko/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF에 ExtGState 추가 – 완전 프로그래밍 워크스루 + +PDF에 **ExtGState를 추가**해야 했지만 어떤 API 호출을 사용해야 할지 몰랐던 적이 있나요? 당신만 그런 것이 아닙니다. 이 튜토리얼에서는 **Aspose.Pdf**를 사용하여 페이지 리소스를 조정하고, 맞춤형 **graphics state dictionary**를 생성하며, 불투명도와 블렌드 모드를 설정하는 정확한 단계를 몇 줄의 C# 코드만으로 안내합니다. + +우리는 기존 PDF를 로드하는 것부터 시작하여, **PDF resources**를 살펴보고 새로운 ExtGState 항목을 삽입한 뒤, 수정된 문서를 저장합니다. 끝까지 진행하면 세밀한 그래픽 제어가 필요한 모든 .NET 프로젝트에 삽입할 수 있는 재사용 가능한 스니펫을 얻게 됩니다. + +## 필요 사항 + +- .NET 6 (또는 최신 .NET Framework 버전) +- **Aspose.Pdf for .NET** NuGet 패키지 (`Aspose.Pdf`) +- 참조할 수 있는 폴더에 위치한 입력 PDF (`input.pdf`) +- C# 구문에 대한 기본적인 이해 (PDF 내부 구조에 대한 깊은 지식은 필요 없음) + +준비가 되었다면, 시작해봅시다. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Add ExtGState to PDF using Aspose.Pdf"} + +## 단계 1: ExtGState를 PDF에 추가 – 문서 로드 + +먼저 해야 할 일은 수정하려는 PDF를 여는 것입니다. `using` 블록을 사용하면 파일 핸들이 자동으로 해제되어, 나중에 동일한 파일을 덮어쓸 때 특히 편리합니다. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*왜 중요한가:* 파일을 로드하면 각 페이지의 **PDF resources**가 포함된 `Pages` 컬렉션에 접근할 수 있습니다. 문서를 열지 않으면 ExtGState 사전을 수정할 수 없습니다. + +## 단계 2: Aspose.Pdf로 PDF 리소스에 접근하기 + +PDF의 각 페이지에는 폰트, 이미지, 그래픽 상태를 보관하는 `/Resources` 사전이 있습니다. 첫 번째 페이지의 리소스를 가져와 `DictionaryEditor`에 래핑하여 항목을 읽고 쓸 수 있게 해야 합니다. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*프로 팁:* PDF에 여러 페이지가 있고 모든 페이지에 동일한 ExtGState가 필요하다면 `pdfDocument.Pages`를 순회하면서 아래 단계를 각 페이지마다 반복하세요. + +## 단계 3: 기존 ExtGState 사전 가져오기 (또는 새로 만들기) + +`/ExtGState` 항목이 이미 존재할 수 있습니다. 고유 키 아래에 새로운 그래픽 상태를 추가하기 위해 이를 가져옵니다. 존재하지 않을 경우 Aspose.Pdf가 예외를 발생시키므로, 필요할 때 새 사전을 생성하여 대비합니다. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*무슨 일인가:* `resourcesEditor["ExtGState"]`는 COS 객체를 반환합니다; `ToCosPdfDictionary()`를 호출하면 수정 가능한 사전으로 변환되어 항목을 추가할 수 있습니다. + +## 단계 4: 원하는 매개변수로 Graphics‑State 사전 만들기 + +이제 튜토리얼의 핵심 단계인 **graphics state dictionary**를 구성합니다. 여기서는 스트로크 불투명도(`CA`), 채우기 불투명도(`ca`), 블렌드 모드(`BM`)를 정의합니다. 이러한 키는 ExtGState 항목에 대한 PDF 사양을 따릅니다. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*왜 설정하는가:* +- **CA**와 **ca**는 잉크가 페이지 배경과 어떻게 혼합되는지를 제어할 수 있어 워터마크나 반투명 오버레이에 적합합니다. +- **BM**(Blend Mode)은 소스와 대상 색상이 어떻게 결합되는지를 결정합니다; 기본값은 `"Normal"`이며, 창의적인 효과를 위해 `"Multiply"` 또는 `"Screen"`으로 전환할 수 있습니다. + +## 단계 5: 새로운 ExtGState를 페이지 리소스에 삽입하기 + +새 그래픽 상태에 이름(`GS0`)을 부여하고 페이지의 ExtGState 사전에 삽입합니다. 이제부터 `/GS0`를 참조하는 모든 콘텐츠 스트림은 우리가 정의한 불투명도와 블렌드 모드를 상속받게 됩니다. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*예외 상황 주의:* `GS0`가 이미 존재하면 Aspose.Pdf가 덮어씁니다. 우발적인 충돌을 방지하려면 `"GS_" + Guid.NewGuid().ToString("N")`와 같은 GUID 기반 이름을 생성하는 것을 고려하세요. + +## 단계 6: 수정된 PDF 저장하기 + +마지막으로 변경 사항을 디스크에 기록합니다. 원본 파일을 덮어쓰거나 새 사본을 출력할 수 있으며, 작업 흐름에 맞게 선택하면 됩니다. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*예상 결과:* 任意의 PDF 뷰어에서 `output.pdf`를 열어보세요. 이후 `GS0`를 참조하는 모든 그리기 명령은 이제 50 % 채우기 불투명도와 전체 스트로크 불투명도로, 기본 블렌드 모드인 normal을 사용해 렌더링됩니다. + +--- + +## 보너스: 콘텐츠 스트림에서 새로운 ExtGState 적용하기 + +ExtGState 사전을 추가하는 것만으로는 충분하지 않습니다; PDF 콘텐츠 스트림에 이를 사용하도록 알려야 합니다. 아래는 방금 만든 상태를 사용해 반투명 사각형을 그리는 간단한 코드 조각입니다: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*설명:* +- `q`/`Q`는 그래픽 상태 스택을 푸시하고 팝하여, 우리의 변경 사항이 다른 요소에 영향을 주지 않도록 합니다. +- `/GS0 gs`는 우리가 추가한 그래픽 상태를 선택합니다. +- `re` 연산자는 사각형을 그리며, `B`는 정의된 불투명도를 사용해 채우고 스트로크합니다. + +사각형 좌표, 색상 등을 자유롭게 조정하거나 형태를 텍스트로 교체해도 됩니다—이제 모든 그리기 명령이 ExtGState 설정을 따르게 됩니다. + +## 흔히 발생하는 문제와 회피 방법 + +| 문제 | 발생 원인 | 해결 방법 | +|------|----------|----------| +| **`/ExtGState` 항목 누락** | 일부 PDF에서는 사전이 정의되지 않을 수 있습니다. | 접근하기 전에 `resourcesEditor.ContainsKey("ExtGState")`를 확인하세요; false인 경우 새 빈 사전을 생성하여 `resourcesEditor`에 추가합니다. | +| **불투명도 적용 안 됨** | 콘텐츠 스트림이 새로운 상태를 참조하지 않습니다. | 영향을 주고 싶은 모든 그리기 명령 앞에 `/GS0 gs`를 삽입하세요. | +| **Blend mode 무시** | 뷰어가 특정 블렌드 모드를 지원하지 않습니다. | 최대 호환성을 위해 `"Normal"` 또는 `"Multiply"`와 같이 널리 지원되는 모드를 사용하세요. | +| **여러 페이지에 동일한 상태 필요** | 첫 번째 페이지만 편집되었습니다. | `pdfDocument.Pages`를 순회하면서 각 페이지에 대해 단계 2‑5를 반복하세요. | + +## 전체 작업 예제 + +아래는 모든 단계와 오류 처리, 새로운 ExtGState 사용 예시를 포함한 완전한 복사‑붙여넣기 가능한 프로그램입니다. + + + +## 다음에 배워야 할 내용은? + +다음 튜토리얼들은 이 가이드에서 시연한 기술을 기반으로 하는 밀접한 주제를 다룹니다. 각 자료는 단계별 설명과 함께 완전한 코드 예제를 제공하여 추가 API 기능을 숙달하고 프로젝트에서 대체 구현 방식을 탐색하도록 돕습니다. + +- [Aspose.PDF for .NET을 사용하여 PDF에 라인 객체 추가하기: 단계별 가이드](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Aspose.PDF for .NET을 사용하여 PDF에 이미지 스탬프 추가하기: 단계별 가이드](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Aspose.PDF for .NET을 사용하여 PDF에 이미지 추가하기: 단계별 가이드](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/polish/net/images-graphics/_index.md b/pdf/polish/net/images-graphics/_index.md index 51cb5f1a77..8ec325993f 100644 --- a/pdf/polish/net/images-graphics/_index.md +++ b/pdf/polish/net/images-graphics/_index.md @@ -164,6 +164,9 @@ Dowiedz się, jak przekształcać złożone skrypty LaTeX w dokumenty PDF za pom ### [Ustawianie tła obrazu w plikach PDF za pomocą Aspose.PDF dla .NET: kompleksowy przewodnik](./aspose-pdf-net-set-image-backgrounds/) Dowiedz się, jak ulepszyć swoje dokumenty PDF, ustawiając tła obrazów za pomocą Aspose.PDF dla .NET. Ten przewodnik obejmuje wskazówki dotyczące konfiguracji, implementacji i optymalizacji. +### [Dodaj ExtGState do PDF przy użyciu Aspose.PDF – kompletny przewodnik](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Dowiedz się, jak dodać ExtGState do plików PDF przy użyciu Aspose.PDF dla .NET, aby kontrolować przezroczystość i inne efekty graficzne. + ## Dodatkowe zasoby - [Aspose.PDF dla dokumentacji sieciowej](https://docs.aspose.com/pdf/net/) diff --git a/pdf/polish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/polish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..eb0f3889b1 --- /dev/null +++ b/pdf/polish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Dowiedz się, jak dodać ExtGState do PDF przy użyciu Aspose.Pdf. Ten przewodnik + krok po kroku obejmuje słownik stanu graficznego, edycję zasobów PDF oraz ustawienia + trybu mieszania. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: pl +lastmod: 2026-07-07 +og_description: Dodaj ExtGState do PDF przy użyciu Aspose.Pdf. Postępuj zgodnie z + tym przewodnikiem, aby zmodyfikować zasoby PDF, utworzyć słownik stanu graficznego, + ustawić przezroczystość i tryb mieszania oraz zapisać wynik. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: Dodaj ExtGState do PDF – samouczek krok po kroku Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Dodaj ExtGState do PDF przy użyciu Aspose.Pdf – Kompletny przewodnik +url: /pl/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Dodaj ExtGState do PDF – Kompletny przewodnik programistyczny + +Czy kiedykolwiek potrzebowałeś **dodać ExtGState do PDF**, ale nie byłeś pewien, które wywołania API użyć? Nie jesteś sam. W tym samouczku przeprowadzimy Cię przez dokładne kroki przy użyciu **Aspose.Pdf**, aby dostosować zasoby strony, utworzyć własny **dictionary stanu graficznego** i ustawić krycie oraz tryb mieszania — wszystko w zaledwie kilku linijkach C#. + +Zaczniemy od załadowania istniejącego PDF, następnie zagłębimy się w jego **zasoby PDF**, wstrzykniemy nowy wpis ExtGState i w końcu zapiszemy zmodyfikowany dokument. Po zakończeniu będziesz mieć gotowy fragment kodu, który możesz wkleić do dowolnego projektu .NET wymagającego precyzyjnej kontroli grafiki. + +## Czego będziesz potrzebować + +- .NET 6 (lub dowolna nowsza wersja .NET Framework) +- Pakiet NuGet **Aspose.Pdf for .NET** (`Aspose.Pdf`) +- Plik PDF wejściowy (`input.pdf`) umieszczony w folderze, do którego możesz odwołać się +- Podstawowa znajomość składni C# (bez potrzeby głębokiej wiedzy o wewnętrznej strukturze PDF) + +Jeśli masz to wszystko, zabierajmy się do pracy. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Dodaj ExtGState do PDF przy użyciu Aspose.Pdf"} + +## Krok 1: Dodaj ExtGState do PDF – Załaduj dokument + +Pierwszą rzeczą, którą musimy zrobić, jest otwarcie PDF, który chcemy zmodyfikować. Użycie bloku `using` zapewnia automatyczne zwolnienie uchwytu pliku, co jest szczególnie przydatne, gdy później nadpisujemy ten sam plik. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Dlaczego to ważne:* Załadowanie pliku daje dostęp do kolekcji `Pages`, w której znajdują się **zasoby PDF** każdej strony. Bez otwarcia dokumentu nie możesz modyfikować słownika ExtGState. + +## Krok 2: Uzyskaj dostęp do zasobów PDF przy użyciu Aspose.Pdf + +Każda strona w PDF posiada słownik `/Resources`, który zawiera czcionki, obrazy i stany graficzne. Musimy pobrać zasoby pierwszej strony i opakować je w `DictionaryEditor`, aby móc odczytywać i zapisywać wpisy. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Wskazówka:* Jeśli Twój PDF ma wiele stron i potrzebujesz tego samego ExtGState na wszystkich, przeiteruj `pdfDocument.Pages` i powtórz poniższe kroki dla każdej strony. + +## Krok 3: Pobierz istniejący słownik ExtGState (lub utwórz nowy) + +Wpis `/ExtGState` może już istnieć. Pobieramy go, aby dodać nasz nowy stan graficzny pod unikalnym kluczem. Jeśli nie istnieje, Aspose.Pdf zgłosi wyjątek, więc zabezpieczamy się, tworząc nowy słownik w razie potrzeby. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Co się dzieje:* `resourcesEditor["ExtGState"]` zwraca obiekt COS; wywołanie `ToCosPdfDictionary()` konwertuje go na modyfikowalny słownik, do którego możemy dodawać wpisy. + +## Krok 4: Zbuduj słownik stanu graficznego z żądanymi parametrami + +Teraz przychodzi sedno samouczka: budowanie **słownika stanu graficznego**, który definiuje krycie linii (`CA`), krycie wypełnienia (`ca`) oraz tryb mieszania (`BM`). Te klucze są zgodne ze specyfikacją PDF dla wpisów ExtGState. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Dlaczego ustawiamy te wartości:* +- **CA** i **ca** pozwalają kontrolować, jak tusze mieszają się z tłem strony — idealne do znaków wodnych lub półprzezroczystych nakładek. +- **BM** (Blend Mode) określa, jak łączą się kolory źródła i docelowe; domyślnie jest to `"Normal"`, ale możesz przełączyć na `"Multiply"` lub `"Screen"` dla kreatywnych efektów. + +## Krok 5: Wstaw nowy ExtGState do zasobów strony + +Nadajemy naszemu nowemu stanowi graficznemu nazwę (`GS0`) i umieszczamy go w słowniku ExtGState strony. Od teraz każdy strumień zawartości odwołujący się do `/GS0` odziedziczy ustawione krycie i tryb mieszania. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Uwaga o szczególnym przypadku:* Jeśli `GS0` już istnieje, Aspose.Pdf go nadpisze. Aby uniknąć przypadkowych kolizji, rozważ wygenerowanie nazwy opartej na GUID, np. `"GS_" + Guid.NewGuid().ToString("N")`. + +## Krok 6: Zapisz zmodyfikowany PDF + +Na koniec zapisujemy zmiany na dysku. Możesz nadpisać oryginalny plik lub utworzyć nową kopię — w zależności od Twojego przepływu pracy. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Czego się spodziewać:* Otwórz `output.pdf` w dowolnym przeglądarce PDF. Wszystkie polecenia rysowania, które później odwołują się do `GS0`, będą renderowane z 50 % kryciem wypełnienia i pełnym kryciem linii, używając domyślnego trybu mieszania. + +--- + +## Bonus: Zastosowanie nowego ExtGState w strumieniu zawartości + +Dodanie samego słownika ExtGState nie wystarczy; musisz poinstruować strumień zawartości PDF, aby go używał. Oto szybki fragment kodu, który rysuje półprzezroczysty prostokąt przy użyciu właśnie utworzonego stanu: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Wyjaśnienie:* +- `q`/`Q` wstawiają i usuwają stan graficzny ze stosu, zapewniając, że nasze zmiany nie rozprzestrzenią się na inne elementy. +- `/GS0 gs` wybiera dodany przez nas stan graficzny. +- Operator `re` rysuje prostokąt, a `B` wypełnia i obrysowuje go, używając zdefiniowanego krycia. + +Śmiało modyfikuj współrzędne prostokąta, kolory lub nawet zamień kształt na tekst — każde polecenie rysowania będzie teraz respektować ustawienia ExtGState. + +## Typowe pułapki i jak ich unikać + +| Problem | Dlaczego się pojawia | Rozwiązanie | +|---------|----------------------|-------------| +| **Brak wpisu `/ExtGState`** | Niektóre pliki PDF nigdy nie definiują tego słownika. | Sprawdź `resourcesEditor.ContainsKey("ExtGState")` przed dostępem; jeśli zwróci false, utwórz nowy pusty słownik i dodaj go do `resourcesEditor`. | +| **Krycie nie zastosowane** | Strumień zawartości nigdy nie odwołuje się do nowego stanu. | Wstaw `/GS0 gs` przed dowolnym poleceniem rysowania, które ma być objęte. | +| **Tryb mieszania ignorowany** | Przeglądarka nie obsługuje niektórych trybów mieszania. | Używaj powszechnie obsługiwanych trybów, takich jak `"Normal"` lub `"Multiply"`, aby zapewnić maksymalną kompatybilność. | +| **Wiele stron wymaga tego samego stanu** | Edytowano tylko pierwszą stronę. | Iteruj po `pdfDocument.Pages` i powtórz kroki 2‑5 dla każdej strony. | + +## Pełny działający przykład + +Poniżej znajduje się kompletny, gotowy do skopiowania program, który zawiera wszystkie kroki, obsługę błędów oraz demonstrację użycia nowego ExtGState. + + + +## Co powinieneś nauczyć się dalej? + +Poniższe samouczki obejmują ściśle powiązane tematy, które rozwijają techniki przedstawione w tym przewodniku. Każdy zasób zawiera kompletne działające przykłady kodu z wyjaśnieniami krok po kroku, aby pomóc Ci opanować dodatkowe funkcje API i odkrywać alternatywne podejścia implementacyjne w własnych projektach. + +- [Jak dodać obiekt linii w PDF przy użyciu Aspose.PDF dla .NET: Przewodnik krok po kroku](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Jak dodać znaki obrazu do PDF przy użyciu Aspose.PDF dla .NET: Przewodnik krok po kroku](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Jak dodać obrazy do PDF przy użyciu Aspose.PDF dla .NET: Przewodnik krok po kroku](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/portuguese/net/images-graphics/_index.md b/pdf/portuguese/net/images-graphics/_index.md index cf3042a283..3b89ec9483 100644 --- a/pdf/portuguese/net/images-graphics/_index.md +++ b/pdf/portuguese/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Aprenda a criar documentos PDF visualmente atraentes extraindo e destacando par ### [Desenhe formas transparentes em PDFs com Aspose.PDF .NET](./draw-transparent-shapes-aspose-pdf-net/) Um tutorial de código para Aspose.PDF Net +### [Adicionar ExtGState a PDF com Aspose.Pdf – Guia completo](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Aprenda a aplicar objetos ExtGState para controlar transparência e outras propriedades gráficas em PDFs usando Aspose.Pdf para .NET. + ### [Identificação eficiente de imagens em PDF com Aspose.PDF para .NET](./master-image-identification-aspose-pdf-net/) Aprenda a identificar imagens em tons de cinza e RGB em PDFs usando o Aspose.PDF para .NET. Este tutorial aborda instalação, extração de imagens e dicas de desempenho. diff --git a/pdf/portuguese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/portuguese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..089313d041 --- /dev/null +++ b/pdf/portuguese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Aprenda como adicionar ExtGState a PDFs usando Aspose.Pdf. Este guia + passo a passo cobre o dicionário de estado gráfico, a edição de recursos PDF e as + configurações de modo de mesclagem. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: pt +lastmod: 2026-07-07 +og_description: Adicionar ExtGState ao PDF usando Aspose.Pdf. Siga este guia para + modificar os recursos do PDF, criar um dicionário de estado gráfico, definir opacidade + e modo de mesclagem e salvar o resultado. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: Adicionar ExtGState ao PDF – Tutorial passo a passo do Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Adicionar ExtGState ao PDF com Aspose.Pdf – Guia Completo +url: /pt/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Adicionar ExtGState ao PDF – Guia de Programação Completo + +Já precisou **adicionar ExtGState ao PDF** mas não tinha certeza de quais chamadas de API usar? Você não está sozinho. Neste tutorial vamos percorrer os passos exatos usando **Aspose.Pdf** para ajustar os recursos da página, criar um **dicionário de estado gráfico** personalizado e definir opacidade e modo de mesclagem — tudo em apenas algumas linhas de C#. + +Começaremos carregando um PDF existente, depois mergulharemos em seus **recursos PDF**, injetaremos uma nova entrada ExtGState e, finalmente, salvaremos o documento modificado. Ao final, você terá um trecho reutilizável que pode inserir em qualquer projeto .NET que precise de controle gráfico detalhado. + +## O que você precisará + +- .NET 6 (ou qualquer versão recente do .NET Framework) +- O pacote NuGet **Aspose.Pdf for .NET** (`Aspose.Pdf`) +- Um PDF de entrada (`input.pdf`) colocado em uma pasta que você possa referenciar +- Um entendimento básico da sintaxe C# (sem necessidade de conhecimento profundo dos internos do PDF) + +Se você tem isso, vamos começar. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Adicionar ExtGState ao PDF usando Aspose.Pdf"} + +## Etapa 1: Adicionar ExtGState ao PDF – Carregar o Documento + +A primeira coisa que precisamos fazer é abrir o PDF que queremos modificar. Usar um bloco `using` garante que o manipulador de arquivo seja liberado automaticamente, o que é especialmente útil quando você sobrescreve o mesmo arquivo mais tarde. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Por que isso importa:* Carregar o arquivo lhe dá acesso à coleção `Pages`, onde vivem os **recursos PDF** de cada página. Sem abrir o documento, você não pode manipular o dicionário ExtGState. + +## Etapa 2: Acessar recursos PDF com Aspose.Pdf + +Cada página em um PDF possui um dicionário `/Resources` que contém fontes, imagens e estados gráficos. Precisamos obter os recursos da primeira página e envolvê-los em um `DictionaryEditor` para que possamos ler e escrever entradas. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Dica de especialista:* Se o seu PDF tem várias páginas e você precisa do mesmo ExtGState em todas elas, faça um loop sobre `pdfDocument.Pages` e repita os passos a seguir para cada página. + +## Etapa 3: Recuperar o dicionário ExtGState existente (ou criar um) + +A entrada `/ExtGState` pode já existir. Nós a recuperamos para que possamos adicionar nosso novo estado gráfico sob uma chave única. Se não existir, o Aspose.Pdf lançará uma exceção, então protegemos isso criando um dicionário novo quando necessário. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*O que está acontecendo:* `resourcesEditor["ExtGState"]` retorna um objeto COS; chamar `ToCosPdfDictionary()` converte‑o em um dicionário mutável ao qual podemos acrescentar entradas. + +## Etapa 4: Construir um dicionário de estado gráfico com os parâmetros desejados + +Agora vem o coração do tutorial: construir um **dicionário de estado gráfico** que define a opacidade do traço (`CA`), a opacidade de preenchimento (`ca`) e o modo de mesclagem (`BM`). Essas chaves seguem a especificação PDF para entradas ExtGState. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Por que definimos isso:* +- **CA** e **ca** permitem controlar como as tintas se mesclam com o fundo da página — perfeito para marcas d'água ou sobreposições semitransparentes. +- **BM** (Blend Mode) determina como as cores de origem e destino se combinam; `"Normal"` é o padrão, mas você pode mudar para `"Multiply"` ou `"Screen"` para efeitos criativos. + +## Etapa 5: Inserir o novo ExtGState nos recursos da página + +Damos ao nosso novo estado gráfico um nome (`GS0`) e o inserimos no dicionário ExtGState da página. A partir de agora, qualquer fluxo de conteúdo que referencie `/GS0` herdará a opacidade e o modo de mesclagem que acabamos de definir. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Observação de caso extremo:* Se `GS0` já existir, o Aspose.Pdf o sobrescreverá. Para evitar colisões acidentais, considere gerar um nome baseado em GUID como `"GS_" + Guid.NewGuid().ToString("N")`. + +## Etapa 6: Salvar o PDF modificado + +Finalmente, gravamos as alterações de volta ao disco. Você pode sobrescrever o arquivo original ou gerar uma cópia nova — o que melhor se adequar ao seu fluxo de trabalho. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*O que esperar:* Abra `output.pdf` em qualquer visualizador de PDF. Qualquer comando de desenho que posteriormente referencie `GS0` agora será renderizado com 50 % de opacidade de preenchimento e opacidade total de traço, usando o modo de mesclagem normal. + +--- + +## Bônus: Aplicando o novo ExtGState em um fluxo de conteúdo + +Adicionar apenas o dicionário ExtGState não é suficiente; você deve instruir o fluxo de conteúdo do PDF a usá‑lo. Aqui está um trecho rápido que desenha um retângulo semitransparente usando o estado que acabamos de criar: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Explicação:* +- `q`/`Q` empurram e removem da pilha de estado gráfico, garantindo que nossas alterações não vazem para outros elementos. +- `/GS0 gs` seleciona o estado gráfico que adicionamos. +- O operador `re` desenha um retângulo, e `B` preenche e traça usando a opacidade definida. + +Sinta‑se à vontade para ajustar as coordenadas do retângulo, cores ou até substituir a forma por texto — qualquer comando de desenho agora respeitará as configurações do ExtGState. + +## Armadilhas comuns e como evitá‑las + +| Problema | Por que acontece | Correção | +|----------|------------------|----------| +| **Entrada `/ExtGState` ausente** | Alguns PDFs nunca definem o dicionário. | Verifique `resourcesEditor.ContainsKey("ExtGState")` antes de acessar; se false, crie um novo dicionário vazio e adicione‑o a `resourcesEditor`. | +| **Opacidade não aplicada** | O fluxo de conteúdo nunca referencia o novo estado. | Insira `/GS0 gs` antes de quaisquer comandos de desenho que você queira afetar. | +| **Modo de mesclagem ignorado** | O visualizador não suporta certos modos de mesclagem. | Use modos amplamente suportados como `"Normal"` ou `"Multiply"` para máxima compatibilidade. | +| **Múltiplas páginas precisam do mesmo estado** | A única primeira página foi editada. | Faça loop sobre `pdfDocument.Pages` e repita as etapas 2‑5 para cada página. | + +## Exemplo completo em funcionamento + +Abaixo está o programa completo, pronto para copiar e colar, que incorpora todas as etapas, tratamento de erros e uma demonstração do uso do novo ExtGState. + + + +## O que você deve aprender a seguir? + +Os tutoriais a seguir cobrem tópicos intimamente relacionados que ampliam as técnicas demonstradas neste guia. Cada recurso inclui exemplos de código completos e funcionais com explicações passo a passo para ajudá‑lo a dominar recursos adicionais da API e explorar abordagens de implementação alternativas em seus próprios projetos. + +- [Como adicionar um objeto de linha em PDF usando Aspose.PDF para .NET: Um guia passo a passo](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Adicionar carimbos 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 imagens a PDFs usando Aspose.PDF para .NET: Um guia passo a passo](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/russian/net/images-graphics/_index.md b/pdf/russian/net/images-graphics/_index.md index bca9317acf..096ce4b42c 100644 --- a/pdf/russian/net/images-graphics/_index.md +++ b/pdf/russian/net/images-graphics/_index.md @@ -164,6 +164,9 @@ ### [Установка фоновых изображений в PDF-файлах с помощью Aspose.PDF для .NET: подробное руководство](./aspose-pdf-net-set-image-backgrounds/) Узнайте, как улучшить ваши PDF-документы, установив фоновые изображения с помощью Aspose.PDF для .NET. В этом руководстве рассматриваются советы по настройке, внедрению и оптимизации. +### [Добавление ExtGState в PDF с помощью Aspose.Pdf – Полное руководство](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Узнайте, как добавить ExtGState в PDF-файлы с помощью Aspose.Pdf, используя полное руководство с примерами кода C#. + ## Дополнительные ресурсы - [Документация Aspose.PDF для сети](https://docs.aspose.com/pdf/net/) diff --git a/pdf/russian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/russian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..a9c008ab1e --- /dev/null +++ b/pdf/russian/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Узнайте, как добавить ExtGState в PDF с помощью Aspose.Pdf. Это пошаговое + руководство охватывает словарь графического состояния, редактирование ресурсов PDF + и настройки режима наложения. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: ru +lastmod: 2026-07-07 +og_description: Добавьте ExtGState в PDF с помощью Aspose.Pdf. Следуйте этому руководству, + чтобы изменить ресурсы PDF, создать словарь графического состояния, установить непрозрачность + и режим наложения, и сохранить результат. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: Добавление ExtGState в PDF – пошаговое руководство Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Добавление ExtGState в PDF с помощью Aspose.Pdf – Полное руководство +url: /ru/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Добавление ExtGState в PDF – Полный программный walkthrough + +Когда‑то вам нужно **добавить ExtGState в PDF**, но вы не знали, какие вызовы API использовать? Вы не одиноки. В этом руководстве мы пройдем все шаги с помощью **Aspose.Pdf**, изменяя ресурсы страницы, создавая пользовательский **графический словарь состояний**, задавая непрозрачность и режим наложения — всё в нескольких строках C#. + +Мы начнём с загрузки существующего PDF, затем перейдём к его **PDF‑ресурсам**, внедрим новую запись ExtGState и, наконец, сохраним изменённый документ. К концу вы получите переиспользуемый фрагмент, который можно вставить в любой .NET‑проект, требующий тонкого управления графикой. + +## Что понадобится + +- .NET 6 (или любая современная версия .NET Framework) +- NuGet‑пакет **Aspose.Pdf for .NET** (`Aspose.Pdf`) +- Входной PDF (`input.pdf`), размещённый в доступной папке +- Базовое понимание синтаксиса C# (глубокие знания внутренностей PDF не требуются) + +Если всё это у вас есть, давайте начинать. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Добавление ExtGState в PDF с помощью Aspose.Pdf"} + +## Шаг 1: Добавление ExtGState в PDF – загрузка документа + +Первое, что нужно сделать, — открыть PDF, который будем изменять. Блок `using` гарантирует автоматическое освобождение файлового дескриптора, что особенно удобно, когда позже вы перезаписываете тот же файл. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Почему это важно:* Загрузка файла даёт доступ к коллекции `Pages`, где находятся **PDF‑ресурсы** каждой страницы. Без открытия документа нельзя работать со словарём ExtGState. + +## Шаг 2: Доступ к PDF‑ресурсам через Aspose.Pdf + +Каждая страница PDF имеет словарь `/Resources`, содержащий шрифты, изображения и графические состояния. Нам нужно получить ресурсы первой страницы и обернуть их в `DictionaryEditor`, чтобы читать и записывать записи. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Совет:* Если ваш PDF содержит несколько страниц и вам нужен один и тот же ExtGState на всех, пройдитесь циклом по `pdfDocument.Pages` и повторите последующие шаги для каждой страницы. + +## Шаг 3: Получение существующего словаря ExtGState (или создание нового) + +Запись `/ExtGState` может уже существовать. Мы извлекаем её, чтобы добавить новое графическое состояние под уникальным ключом. Если её нет, Aspose.Pdf бросит исключение, поэтому мы защищаемся, создавая новый словарь при необходимости. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Что происходит:* `resourcesEditor["ExtGState"]` возвращает COS‑объект; вызов `ToCosPdfDictionary()` преобразует его в изменяемый словарь, в который можно добавить новые записи. + +## Шаг 4: Создание словаря графического состояния с нужными параметрами + +Теперь к сердцу руководства: построение **словаря графического состояния**, определяющего непрозрачность обводки (`CA`), заполнения (`ca`) и режим наложения (`BM`). Эти ключи соответствуют спецификации PDF для записей ExtGState. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Зачем мы их задаём:* +- **CA** и **ca** позволяют управлять тем, как чернила смешиваются с фоном страницы — идеально для водяных знаков или полупрозрачных наложений. +- **BM** (Blend Mode) определяет, как комбинируются цвета источника и назначения; `"Normal"` — значение по умолчанию, но можно переключить на `"Multiply"` или `"Screen"` для креативных эффектов. + +## Шаг 5: Вставка нового ExtGState в ресурсы страницы + +Мы даём нашему графическому состоянию имя (`GS0`) и помещаем его в словарь ExtGState страницы. С этого момента любой поток контента, ссылающийся на `/GS0`, будет наследовать заданные непрозрачность и режим наложения. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Примечание о граничных случаях:* Если `GS0` уже существует, Aspose.Pdf перезапишет его. Чтобы избежать случайных конфликтов, рассмотрите генерацию имени на основе GUID, например `"GS_" + Guid.NewGuid().ToString("N")`. + +## Шаг 6: Сохранение изменённого PDF + +Наконец, записываем изменения на диск. Можно перезаписать оригинальный файл или создать новую копию — как удобнее вашему рабочему процессу. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Что ожидать:* Откройте `output.pdf` в любом просмотрщике PDF. Любые команды рисования, которые позже ссылаются на `GS0`, теперь будут отрисовываться с 50 % непрозрачностью заполнения и полной непрозрачностью обводки, используя обычный режим наложения. + +--- + +## Бонус: Применение нового ExtGState в потоке контента + +Одного лишь добавления словаря ExtGState недостаточно; нужно заставить поток контента PDF использовать его. Ниже короткий фрагмент, рисующий полупрозрачный прямоугольник с помощью только что созданного состояния: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Пояснение:* +- `q`/`Q` помещают и снимают состояние графики со стека, гарантируя, что наши изменения не «просочатся» к другим элементам. +- `/GS0 gs` выбирает добавленное графическое состояние. +- Оператор `re` рисует прямоугольник, а `B` заполняет и обводит его, используя заданную непрозрачность. + +Не стесняйтесь менять координаты прямоугольника, цвета или даже заменять форму на текст — любая команда рисования теперь будет учитывать настройки ExtGState. + +## Распространённые ошибки и как их избежать + +| Проблема | Почему происходит | Как исправить | +|----------|-------------------|---------------| +| **Отсутствует запись `/ExtGState`** | В некоторых PDF словарь не определён. | Проверьте `resourcesEditor.ContainsKey("ExtGState")` перед доступом; если `false`, создайте пустой словарь и добавьте его в `resourcesEditor`. | +| **Непрозрачность не применяется** | Поток контента никогда не ссылается на новое состояние. | Вставьте `/GS0 gs` перед любыми командами рисования, которые должны быть затронуты. | +| **Игнорируется режим наложения** | Просмотрщик не поддерживает некоторые режимы. | Оставайтесь в широко поддерживаемых режимах, таких как `"Normal"` или `"Multiply"`, для максимальной совместимости. | +| **Несколько страниц нуждаются в одинаковом состоянии** | Был изменён только первый лист. | Пройдитесь циклом по `pdfDocument.Pages` и повторите шаги 2‑5 для каждой страницы. | + +## Полный рабочий пример + +Ниже представлена полностью готовая к копированию и вставке программа, включающая все шаги, обработку ошибок и демонстрацию использования нового ExtGState. + + + +## Что изучать дальше? + +Следующие руководства охватывают тесно связанные темы, расширяющие техники, продемонстрированные в этом пособии. Каждый ресурс содержит полностью работающие примеры кода с пошаговыми объяснениями, помогая вам освоить дополнительные возможности API и исследовать альтернативные подходы в собственных проектах. + +- [How to Add a Line Object in PDF Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [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 Images to PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/spanish/net/images-graphics/_index.md b/pdf/spanish/net/images-graphics/_index.md index 53b1e6fe86..34ab9d4d53 100644 --- a/pdf/spanish/net/images-graphics/_index.md +++ b/pdf/spanish/net/images-graphics/_index.md @@ -104,6 +104,9 @@ Aprenda a crear archivos PDF accesibles, etiquetados e incrustados con imágenes ### [Cómo crear rectángulos transparentes en archivos PDF con Aspose.PDF para .NET](./create-transparent-rectangles-aspose-pdf-dotnet/) Aprenda a mejorar sus documentos PDF creando rectángulos con transparencia alfa con Aspose.PDF para .NET. Siga esta guía paso a paso. +### [Agregar ExtGState a PDF con Aspose.Pdf – Guía completa](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Aprenda a aplicar objetos ExtGState en PDFs usando Aspose.Pdf para .NET, controlando transparencias y efectos avanzados en sus documentos. + ### [Cómo eliminar imágenes de archivos PDF con Aspose.PDF para .NET: guía completa](./delete-images-aspose-pdf-net/) Aprenda a eliminar imágenes de archivos PDF de forma eficiente con Aspose.PDF para .NET. Esta guía abarca la configuración, ejemplos de código y prácticas recomendadas. diff --git a/pdf/spanish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/spanish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..33ba3ccc98 --- /dev/null +++ b/pdf/spanish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Aprenda cómo agregar ExtGState a PDF usando Aspose.Pdf. Esta guía paso + a paso cubre el diccionario de estado gráfico, la edición de recursos PDF y la configuración + del modo de fusión. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: es +lastmod: 2026-07-07 +og_description: Agregar ExtGState a PDF usando Aspose.Pdf. Sigue esta guía para modificar + los recursos del PDF, crear un diccionario de estado gráfico, establecer la opacidad + y el modo de fusión, y guardar el resultado. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: Agregar ExtGState a PDF – Tutorial paso a paso de Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Agregar ExtGState a PDF con Aspose.Pdf – Guía completa +url: /es/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Añadir ExtGState a PDF – Guía Completa de Programación + +¿Alguna vez necesitaste **añadir ExtGState a PDF** pero no estabas seguro de qué llamadas a la API usar? No estás solo. En este tutorial recorreremos los pasos exactos usando **Aspose.Pdf** para ajustar los recursos de la página, crear un **diccionario de estado gráfico** personalizado y establecer la opacidad y el modo de fusión, todo en solo unas pocas líneas de C#. + +Comenzaremos cargando un PDF existente, luego nos adentraremos en sus **recursos PDF**, inyectaremos una nueva entrada ExtGState y, finalmente, guardaremos el documento modificado. Al final tendrás un fragmento reutilizable que puedes insertar en cualquier proyecto .NET que necesite un control gráfico de gran precisión. + +## Qué Necesitarás + +- .NET 6 (o cualquier versión reciente de .NET Framework) +- El paquete NuGet **Aspose.Pdf for .NET** (`Aspose.Pdf`) +- Un PDF de entrada (`input.pdf`) colocado en una carpeta a la que puedas hacer referencia +- Un conocimiento básico de la sintaxis de C# (no se requieren conocimientos profundos de internals de PDF) + +Si ya los tienes, ¡manos a la obra! + +![Agregar ExtGState a PDF usando Aspose.Pdf](placeholder.png){alt="Agregar ExtGState a PDF usando Aspose.Pdf"} + +## Paso 1: Añadir ExtGState a PDF – Cargar el Documento + +Lo primero que debemos hacer es abrir el PDF que queremos modificar. Usar un bloque `using` garantiza que el manejador del archivo se libere automáticamente, lo cual es especialmente útil cuando luego sobrescribes el mismo archivo. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Por qué es importante:* Cargar el archivo te da acceso a la colección `Pages`, donde viven los **recursos PDF** de cada página. Sin abrir el documento no puedes tocar el diccionario ExtGState. + +## Paso 2: Acceder a los Recursos PDF con Aspose.Pdf + +Cada página en un PDF tiene un diccionario `/Resources` que contiene fuentes, imágenes y estados gráficos. Necesitamos obtener los recursos de la primera página y envolverlos en un `DictionaryEditor` para poder leer y escribir entradas. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Consejo profesional:* Si tu PDF tiene varias páginas y necesitas el mismo ExtGState en todas ellas, recorre `pdfDocument.Pages` y repite los siguientes pasos para cada página. + +## Paso 3: Recuperar el Diccionario ExtGState Existente (o Crear Uno) + +La entrada `/ExtGState` puede ya existir. La obtenemos para poder añadir nuestro nuevo estado gráfico bajo una clave única. Si no existe, Aspose.Pdf lanzará una excepción, por lo que nos protegemos creando un nuevo diccionario cuando sea necesario. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Qué está sucediendo:* `resourcesEditor["ExtGState"]` devuelve un objeto COS; llamar a `ToCosPdfDictionary()` lo convierte en un diccionario mutable al que podemos añadir entradas. + +## Paso 4: Construir un Diccionario de Estado Gráfico con los Parámetros Deseados + +Ahora llega el núcleo del tutorial: construir un **diccionario de estado gráfico** que define la opacidad del trazo (`CA`), la opacidad del relleno (`ca`) y el modo de fusión (`BM`). Estas claves siguen la especificación PDF para entradas ExtGState. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Por qué establecemos esto:* +- **CA** y **ca** te permiten controlar cómo se mezclan las tintas con el fondo de la página—perfecto para marcas de agua o superposiciones semitransparentes. +- **BM** (Modo de Fusión) determina cómo se combinan los colores de origen y destino; `"Normal"` es el valor predeterminado, pero puedes cambiar a `"Multiply"` o `"Screen"` para efectos creativos. + +## Paso 5: Insertar el Nuevo ExtGState en los Recursos de la Página + +Le damos a nuestro nuevo estado gráfico un nombre (`GS0`) y lo insertamos en el diccionario ExtGState de la página. A partir de ahora, cualquier flujo de contenido que haga referencia a `/GS0` heredará la opacidad y el modo de fusión que acabamos de definir. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Nota de caso límite:* Si `GS0` ya existe, Aspose.Pdf lo sobrescribirá. Para evitar colisiones accidentales, considera generar un nombre basado en GUID como `"GS_" + Guid.NewGuid().ToString("N")`. + +## Paso 6: Guardar el PDF Modificado + +Finalmente, escribimos los cambios de vuelta al disco. Puedes sobrescribir el archivo original o generar una copia nueva, lo que mejor se ajuste a tu flujo de trabajo. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Qué esperar:* Abre `output.pdf` en cualquier visor de PDF. Cualquier comando de dibujo que luego haga referencia a `GS0` ahora se renderizará con un 50 % de opacidad de relleno y opacidad completa de trazo, usando el modo de fusión normal. + +--- + +## Bonus: Aplicar el Nuevo ExtGState en un Flujo de Contenido + +Agregar solo el diccionario ExtGState no es suficiente; debes indicar al flujo de contenido del PDF que lo use. Aquí tienes un fragmento rápido que dibuja un rectángulo semitransparente usando el estado que acabamos de crear: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Explicación:* +- `q`/`Q` empujan y sacan de la pila de estado gráfico, asegurando que nuestros cambios no se filtren a otros elementos. +- `/GS0 gs` selecciona el estado gráfico que añadimos. +- El operador `re` dibuja un rectángulo, y `B` lo rellena y traza usando la opacidad definida. + +Siéntete libre de ajustar las coordenadas del rectángulo, los colores, o incluso reemplazar la forma por texto—cualquier comando de dibujo ahora respetará la configuración del ExtGState. + +## Problemas Comunes y Cómo Evitarlos + +| Problema | Por qué ocurre | Solución | +|----------|----------------|----------| +| **Falta la entrada `/ExtGState`** | Algunos PDFs nunca definen el diccionario. | Verifica `resourcesEditor.ContainsKey("ExtGState")` antes de acceder; si es false, crea un nuevo diccionario vacío y añádelo a `resourcesEditor`. | +| **Opacidad no aplicada** | El flujo de contenido nunca hace referencia al nuevo estado. | Inserta `/GS0 gs` antes de cualquier comando de dibujo que quieras que se vea afectado. | +| **Modo de fusión ignorado** | El visor no soporta ciertos modos de fusión. | Utiliza modos ampliamente soportados como `"Normal"` o `"Multiply"` para máxima compatibilidad. | +| **Varias páginas necesitan el mismo estado** | Solo se editó la primera página. | Recorre `pdfDocument.Pages` y repite los pasos 2‑5 para cada página. | + +## Ejemplo Completo Funcional + +A continuación se muestra el programa completo, listo para copiar y pegar, que incorpora todos los pasos, manejo de errores y una demostración del uso del nuevo ExtGState. + + + +## ¿Qué Deberías Aprender a Continuación? + +Los siguientes tutoriales cubren temas estrechamente relacionados que amplían las técnicas demostradas en esta guía. Cada recurso incluye ejemplos de código completos y funcionales con explicaciones paso a paso para ayudarte a dominar características adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [Cómo Añadir un Objeto Línea en PDF Usando Aspose.PDF para .NET: Guía Paso a Paso](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Añadir 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 Añadir Imágenes a PDFs Usando Aspose.PDF para .NET: Guía Paso a Paso](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/swedish/net/images-graphics/_index.md b/pdf/swedish/net/images-graphics/_index.md index 31f13cf9e9..30de269186 100644 --- a/pdf/swedish/net/images-graphics/_index.md +++ b/pdf/swedish/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Lär dig hur du skapar visuellt tilltalande PDF-dokument genom att extrahera och ### [Rita genomskinliga former i PDF-filer med Aspose.PDF .NET](./draw-transparent-shapes-aspose-pdf-net/) En kodhandledning för Aspose.PDF Net +### [Lägg till ExtGState i PDF med Aspose.Pdf – Komplett guide](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Lär dig hur du använder ExtGState för att kontrollera transparens och blandningslägen i PDF-dokument med Aspose.Pdf för .NET. + ### [Effektiv PDF-bildidentifiering med Aspose.PDF för .NET](./master-image-identification-aspose-pdf-net/) Lär dig hur du identifierar gråskale- och RGB-bilder i PDF-filer med Aspose.PDF för .NET. Den här handledningen täcker installation, bildextrahering och prestandatips. @@ -126,7 +129,7 @@ Lär dig hur du effektivt extraherar bilder från PDF-filer med Aspose.PDF .NET Lär dig hur du enkelt extraherar bilder från PDF-dokument med Aspose.PDF för .NET med den här omfattande utvecklarguiden. Förbättra ditt dokumenthanteringsarbetsflöde idag. ### [Hur man extraherar bilder från PDF-filer med Aspose.PDF för .NET: En steg-för-steg-guide](./extract-images-aspose-pdf-dot-net-guide/) -Lär dig hur du effektivt extraherar bilder från PDF-filer med Aspose.PDF för .NET med den här omfattande guiden, med kodexempel och bästa praxis. +Lär dig hur du effektivt extraherar bilder från PDF-filer med Aspose.PDF för .NET med den här omfattande guiden. Perfekt för utvecklare som vill förbättra dokumentbehandlingsfunktionerna. ### [Hur man extraherar bilder från PDF-filer med Aspose.PDF för .NET: En steg-för-steg-guide](./extract-images-aspose-pdf-net-guide/) Lär dig hur du extraherar bilder från PDF-dokument med Aspose.PDF för .NET med den här omfattande guiden. Perfekt för utvecklare som vill förbättra dokumentbehandlingsfunktionerna. diff --git a/pdf/swedish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/swedish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..5c25d51505 --- /dev/null +++ b/pdf/swedish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,194 @@ +--- +category: general +date: 2026-07-07 +description: Lär dig hur du lägger till ExtGState i PDF med Aspose.Pdf. Denna steg‑för‑steg‑guide + täcker grafikstatusordbok, redigering av PDF‑resurser och inställningar för blandningsläge. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: sv +lastmod: 2026-07-07 +og_description: Lägg till ExtGState i PDF med Aspose.Pdf. Följ den här guiden för + att ändra PDF-resurserna, skapa en grafikstatusordbok, ställa in opacitet och blandningsläge + samt spara resultatet. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: Lägg till ExtGState i PDF – Aspose.Pdf steg-för-steg handledning +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Lägg till ExtGState i PDF med Aspose.Pdf – Komplett guide +url: /sv/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Add ExtGState to PDF – Complete Programming Walkthrough + +Har du någonsin behövt **add ExtGState to PDF** men varit osäker på vilka API‑anrop du ska använda? Du är inte ensam. I den här handledningen går vi igenom de exakta stegen med **Aspose.Pdf** för att justera sidresurserna, skapa en anpassad **graphics state dictionary** och sätta opacitet samt blandningsläge – allt på bara några rader C#. + +Vi börjar med att läsa in en befintlig PDF, dyker sedan ner i dess **PDF resources**, injicerar ett nytt ExtGState‑element och sparar slutligen det modifierade dokumentet. När du är klar har du ett återanvändbart kodsnutt som du kan lägga in i vilket .NET‑projekt som helst som behöver fin‑granulär grafikstyrning. + +## Vad du behöver + +- .NET 6 (eller någon nyare .NET Framework‑version) +- **Aspose.Pdf for .NET**‑paketet från NuGet (`Aspose.Pdf`) +- En inmatnings‑PDF (`input.pdf`) placerad i en mapp du kan referera till +- En grundläggande förståelse för C#‑syntax (ingen djup PDF‑intern kunskap krävs) + +Om du har allt detta, låt oss sätta igång. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Add ExtGState to PDF using Aspose.Pdf"} + +## Steg 1: Add ExtGState to PDF – Läs in dokumentet + +Det första vi måste göra är att öppna PDF‑filen vi vill modifiera. Genom att använda ett `using`‑block säkerställs att filhandtaget släpps automatiskt, vilket är särskilt praktiskt när du senare skriver över samma fil. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Varför detta är viktigt:* Att läsa in filen ger dig åtkomst till `Pages`‑samlingen, där varje sidas **PDF resources** finns. Utan att öppna dokumentet kan du inte ändra ExtGState‑ordlistan. + +## Steg 2: Access PDF Resources with Aspose.Pdf + +Varje sida i en PDF har en `/Resources`‑ordlista som innehåller typsnitt, bilder och grafik‑tillstånd. Vi måste hämta den första sidans resurser och omsluta dem i en `DictionaryEditor` så att vi kan läsa och skriva poster. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Proffstips:* Om din PDF har flera sidor och du behöver samma ExtGState på alla, loopa över `pdfDocument.Pages` och upprepa följande steg för varje sida. + +## Steg 3: Retrieve Existing ExtGState Dictionary (or Create One) + +`/ExtGState`‑posten kan redan finnas. Vi hämtar den så att vi kan lägga till vårt nya grafik‑tillstånd under en unik nyckel. Om den inte finns kommer Aspose.Pdf att kasta ett undantag, så vi skyddar mot det genom att skapa en ny ordlista vid behov. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Vad som händer:* `resourcesEditor["ExtGState"]` returnerar ett COS‑objekt; genom att anropa `ToCosPdfDictionary()` omvandlas det till en muterbar ordlista som vi kan lägga till poster i. + +## Steg 4: Build a Graphics‑State Dictionary with Desired Parameters + +Nu kommer kärnan i handledningen: att konstruera en **graphics state dictionary** som definierar linjens opacitet (`CA`), fyllningsopacitet (`ca`) och blandningsläge (`BM`). Dessa nycklar följer PDF‑specifikationen för ExtGState‑poster. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Varför vi sätter dessa:* +- **CA** och **ca** låter dig kontrollera hur bläck blandas med sidans bakgrund – perfekt för vattenstämplar eller halvtransparenta överlägg. +- **BM** (Blend Mode) bestämmer hur käll‑ och destinationsfärger kombineras; `"Normal"` är standard, men du kan byta till `"Multiply"` eller `"Screen"` för kreativa effekter. + +## Steg 5: Insert the New ExtGState into the Page Resources + +Vi ger vårt nya grafik‑tillstånd ett namn (`GS0`) och placerar det i sidans ExtGState‑ordlista. Från och med nu kommer alla innehållsströmmar som refererar till `/GS0` att ärva den opacitet och det blandningsläge vi just definierat. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Obs på kantfall:* Om `GS0` redan finns kommer Aspose.Pdf att skriva över den. För att undvika oavsiktliga kollisioner, överväg att generera ett GUID‑baserat namn som `"GS_" + Guid.NewGuid().ToString("N")`. + +## Steg 6: Save the Modified PDF + +Till sist skriver vi tillbaka ändringarna till disken. Du kan skriva över originalfilen eller skapa en ny kopia – vad som än passar ditt arbetsflöde. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Vad du kan förvänta dig:* Öppna `output.pdf` i någon PDF‑visare. Alla ritkommandon som senare refererar till `GS0` kommer nu att renderas med 50 % fyllningsopacitet och full linjeopacitet, med det normala blandningsläget. + +--- + +## Bonus: Applying the New ExtGState in a Content Stream + +Att bara lägga till ExtGState‑ordlistan räcker inte; du måste instruera PDF‑innehållsströmmen att använda den. Här är ett snabbt kodexempel som ritar en halvtransparent rektangel med det tillstånd vi just skapade: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Förklaring:* +- `q`/`Q` skjuter och poppar grafik‑tillståndsstacken, vilket säkerställer att våra ändringar inte läcker till andra element. +- `/GS0 gs` väljer det grafik‑tillstånd vi lade till. +- `re`‑operatorn ritar en rektangel, och `B` fyller och konturerar den med den definierade opaciteten. + +Känn dig fri att justera rektangelns koordinater, färger eller till och med ersätta formen med text – vilket ritkommando som helst kommer nu att följa ExtGState‑inställningarna. + +## Vanliga fallgropar & hur du undviker dem + +| Problem | Varför det händer | Lösning | +|-------|----------------|-----| +| **Missing `/ExtGState` entry** | Some PDFs never define the dictionary. | Check `resourcesEditor.ContainsKey("ExtGState")` before accessing; if false, create a new empty dictionary and add it to `resourcesEditor`. | +| **Opacity not applied** | Content stream never references the new state. | Insert `/GS0 gs` before any drawing commands you want affected. | +| **Blend mode ignored** | Viewer doesn’t support certain blend modes. | Stick to widely supported modes like `"Normal"` or `"Multiply"` for maximum compatibility. | +| **Multiple pages need the same state** | Only the first page was edited. | Loop over `pdfDocument.Pages` and repeat steps 2‑5 for each page. | + +## Fullt fungerande exempel + +Nedan är det kompletta, kopiera‑och‑klistra‑klara programmet som innehåller alla steg, felhantering och en demonstration av hur du använder den nya ExtGState. + + + +## Vad bör du lära dig härnäst? + +Följande handledningar täcker närbesläktade ämnen som bygger på teknikerna som demonstrerats i den här guiden. Varje resurs innehåller kompletta fungerande kodexempel med steg‑för‑steg‑förklaringar för att hjälpa dig bemästra ytterligare API‑funktioner och utforska alternativa implementationsmetoder i dina egna projekt. + +- [Hur man lägger till ett linjeobjekt i PDF med Aspose.PDF för .NET: En steg‑för‑steg‑guide](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Lägg till bildstämplar i PDF‑filer med Aspose.PDF för .NET: En steg‑för‑steg‑guide](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Hur man lägger till bilder i PDF‑filer med Aspose.PDF för .NET: En steg‑för‑steg‑guide](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/thai/net/images-graphics/_index.md b/pdf/thai/net/images-graphics/_index.md index 855fcca3a0..3bf2c2f456 100644 --- a/pdf/thai/net/images-graphics/_index.md +++ b/pdf/thai/net/images-graphics/_index.md @@ -164,6 +164,9 @@ ### [ตั้งค่าพื้นหลังรูปภาพใน PDF โดยใช้ Aspose.PDF สำหรับ .NET: คู่มือฉบับสมบูรณ์](./aspose-pdf-net-set-image-backgrounds/) เรียนรู้วิธีปรับปรุงเอกสาร PDF ของคุณโดยการตั้งค่าพื้นหลังรูปภาพโดยใช้ Aspose.PDF สำหรับ .NET คู่มือนี้ครอบคลุมถึงเคล็ดลับการตั้งค่า การใช้งาน และการปรับแต่ง +### [เพิ่ม ExtGState ไปยัง PDF ด้วย Aspose.PDF สำหรับ .NET – คู่มือฉบับสมบูรณ์](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +เรียนรู้วิธีการใช้ ExtGState เพื่อควบคุมความโปร่งใสและการเรนเดอร์ใน PDF ด้วย Aspose.PDF สำหรับ .NET อย่างละเอียด + ## แหล่งข้อมูลเพิ่มเติม - [Aspose.PDF สำหรับเอกสารประกอบ Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/thai/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/thai/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..08532b8ea4 --- /dev/null +++ b/pdf/thai/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,193 @@ +--- +category: general +date: 2026-07-07 +description: เรียนรู้วิธีเพิ่ม ExtGState ไปยัง PDF ด้วย Aspose.Pdf คู่มือขั้นตอนนี้ครอบคลุมพจนานุกรมสถานะกราฟิก + การแก้ไขทรัพยากร PDF และการตั้งค่าโหมดผสม +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: th +lastmod: 2026-07-07 +og_description: เพิ่ม ExtGState ไปยัง PDF ด้วย Aspose.Pdf. ทำตามคำแนะนำนี้เพื่อแก้ไขทรัพยากร + PDF, สร้างพจนานุกรมสถานะกราฟิก, ตั้งค่าความทึบและโหมดผสม, แล้วบันทึกผลลัพธ์. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: เพิ่ม ExtGState ไปยัง PDF – บทแนะนำ Aspose.Pdf ขั้นตอนต่อขั้นตอน +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: เพิ่ม ExtGState ลงใน PDF ด้วย Aspose.Pdf – คู่มือฉบับสมบูรณ์ +url: /th/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# เพิ่ม ExtGState ไปยัง PDF – คู่มือการเขียนโปรแกรมเต็มรูปแบบ + +เคยต้องการ **add ExtGState to PDF** แต่ไม่แน่ใจว่าจะใช้ API calls ไหน? คุณไม่ได้เป็นคนเดียว ในบทแนะนำนี้เราจะเดินผ่านขั้นตอนที่แม่นยำโดยใช้ **Aspose.Pdf** เพื่อปรับแต่งทรัพยากรของหน้า, สร้าง **graphics state dictionary** แบบกำหนดเอง, และตั้งค่า opacity และ blend mode—ทั้งหมดในไม่กี่บรรทัดของ C#. + +เราจะเริ่มโดยโหลด PDF ที่มีอยู่แล้ว, จากนั้นเจาะลึกไปยัง **PDF resources** ของมัน, แทรกรายการ ExtGState ใหม่, และสุดท้ายบันทึกเอกสารที่แก้ไขแล้ว. เมื่อจบคุณจะมี snippet ที่นำกลับมาใช้ได้ซ้ำในโครงการ .NET ใดก็ได้ที่ต้องการการควบคุมกราฟิกแบบละเอียด. + +## สิ่งที่คุณต้องเตรียม + +- .NET 6 (หรือเวอร์ชัน .NET Framework ล่าสุดใดก็ได้) +- The **Aspose.Pdf for .NET** NuGet package (`Aspose.Pdf`) +- ไฟล์ PDF อินพุต (`input.pdf`) ที่วางไว้ในโฟลเดอร์ที่คุณสามารถอ้างอิงได้ +- ความเข้าใจพื้นฐานเกี่ยวกับไวยากรณ์ C# (ไม่จำเป็นต้องรู้ลึกเกี่ยวกับโครงสร้าง PDF) + +ถ้าคุณมีทั้งหมดนี้แล้ว, มาเริ่มกันเลย. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="เพิ่ม ExtGState ไปยัง PDF โดยใช้ Aspose.Pdf"} + +## ขั้นตอนที่ 1: เพิ่ม ExtGState ไปยัง PDF – โหลดเอกสาร + +สิ่งแรกที่เราต้องทำคือเปิด PDF ที่ต้องการแก้ไข. การใช้บล็อก `using` จะทำให้ตัวจัดการไฟล์ถูกปล่อยอัตโนมัติ, ซึ่งสะดวกมากเมื่อคุณต้องการเขียนทับไฟล์เดิมในภายหลัง. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Why this matters:* การโหลดไฟล์ทำให้คุณเข้าถึงคอลเลกชัน `Pages` ซึ่งแต่ละหน้ามี **PDF resources** อยู่. หากไม่ได้เปิดเอกสารคุณจะไม่สามารถแก้ไข ExtGState dictionary ได้. + +## ขั้นตอนที่ 2: เข้าถึง PDF Resources ด้วย Aspose.Pdf + +แต่ละหน้าของ PDF มี dictionary `/Resources` ที่เก็บฟอนต์, รูปภาพ, และ graphics states. เราต้องดึง resources ของหน้าที่หนึ่งและห่อไว้ใน `DictionaryEditor` เพื่อให้สามารถอ่านและเขียนรายการได้. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Pro tip:* หาก PDF ของคุณมีหลายหน้าและต้องการ ExtGState เดียวกันบนทุกหน้า, ให้วนลูป `pdfDocument.Pages` และทำซ้ำขั้นตอนต่อไปนี้สำหรับแต่ละหน้า. + +## ขั้นตอนที่ 3: ดึง ExtGState Dictionary ที่มีอยู่ (หรือสร้างใหม่) + +รายการ `/ExtGState` อาจมีอยู่แล้ว. เราจะดึงมันเพื่อเพิ่ม graphics state ใหม่ของเราภายใต้คีย์ที่ไม่ซ้ำกัน. หากไม่มี, Aspose.Pdf จะโยนข้อผิดพลาด, ดังนั้นเราจึงตรวจสอบและสร้าง dictionary ว่างใหม่เมื่อจำเป็น. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*What’s happening:* `resourcesEditor["ExtGState"]` คืนค่าเป็น COS object; การเรียก `ToCosPdfDictionary()` จะเปลี่ยนเป็น dictionary ที่แก้ไขได้ซึ่งเราสามารถเพิ่มรายการลงไปได้. + +## ขั้นตอนที่ 4: สร้าง Graphics‑State Dictionary ด้วยพารามิเตอร์ที่ต้องการ + +ตอนนี้เป็นหัวใจของบทแนะนำ: การสร้าง **graphics state dictionary** ที่กำหนดค่า stroke opacity (`CA`), fill opacity (`ca`), และ blend mode (`BM`). คีย์เหล่านี้สอดคล้องกับสเปค PDF สำหรับรายการ ExtGState. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*เหตุผลที่เราตั้งค่าเหล่านี้:* +- **CA** และ **ca** ให้คุณควบคุมการผสมของหมึกกับพื้นหลังของหน้า—เหมาะสำหรับการใส่ลายน้ำหรือ overlay ที่มีความโปร่งใสบางส่วน. +- **BM** (Blend Mode) กำหนดวิธีการผสานสีต้นทางและปลายทาง; `"Normal"` เป็นค่าเริ่มต้น, แต่คุณสามารถเปลี่ยนเป็น `"Multiply"` หรือ `"Screen"` เพื่อเอฟเฟกต์สร้างสรรค์ได้. + +## ขั้นตอนที่ 5: แทรก ExtGState ใหม่ลงใน Page Resources + +เราตั้งชื่อ graphics state ใหม่เป็น (`GS0`) แล้วใส่ลงใน ExtGState dictionary ของหน้า. ตั้งแต่นี้ไป, content stream ใดที่อ้างอิง `/GS0` จะสืบทอดค่า opacity และ blend mode ที่เรากำหนดไว้. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Edge case note:* หาก `GS0` มีอยู่แล้ว, Aspose.Pdf จะเขียนทับ. เพื่อหลีกเลี่ยงการชนกันโดยบังเอิญ, ควรสร้างชื่อแบบ GUID เช่น `"GS_" + Guid.NewGuid().ToString("N")`. + +## ขั้นตอนที่ 6: บันทึก PDF ที่แก้ไขแล้ว + +สุดท้าย, เราเขียนการเปลี่ยนแปลงกลับไปยังดิสก์. คุณสามารถเขียนทับไฟล์ต้นฉบับหรือสร้างไฟล์ใหม่—ขึ้นกับกระบวนการทำงานของคุณ. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*What to expect:* เปิด `output.pdf` ด้วยโปรแกรมดู PDF ใดก็ได้. คำสั่งวาดใดที่อ้างอิง `GS0` ต่อไปจะถูกเรนเดอร์ด้วยความโปร่งใสเติม 50 % และความโปร่งใสเส้นเต็ม, ใช้ blend mode ปกติ. + +--- + +## โบนัส: การใช้ ExtGState ใหม่ใน Content Stream + +การเพิ่ม ExtGState dictionary อย่างเดียวไม่พอ; คุณต้องบอกให้ content stream ของ PDF ใช้มัน. ด้านล่างเป็น snippet สั้น ๆ ที่วาดสี่เหลี่ยมโปร่งใสโดยใช้สถานะที่เราสร้างขึ้น: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*คำอธิบาย:* +- `q`/`Q` ดันและดึง graphics state stack, ทำให้การเปลี่ยนแปลงของเราไม่รั่วไหลไปยังองค์ประกอบอื่น. +- `/GS0 gs` เลือก graphics state ที่เราเพิ่ม. +- ตัวดำเนินการ `re` วาดสี่เหลี่ยม, และ `B` เติมและเส้นขอบโดยใช้ค่า opacity ที่กำหนด. + +คุณสามารถปรับพิกัดของสี่เหลี่ยม, สี, หรือแม้แต่เปลี่ยนรูปเป็นข้อความ—คำสั่งวาดใดก็จะเคารพการตั้งค่า ExtGState นี้แล้ว. + +## ข้อผิดพลาดทั่วไป & วิธีหลีกเลี่ยง + +| ปัญหา | สาเหตุ | วิธีแก้ | +|-------|--------|--------| +| **Missing `/ExtGState` entry** | PDF บางไฟล์ไม่เคยกำหนด dictionary นี้. | ตรวจสอบ `resourcesEditor.ContainsKey("ExtGState")` ก่อนเข้าถึง; หากเป็น false ให้สร้าง dictionary ว่างใหม่และเพิ่มลงใน `resourcesEditor`. | +| **Opacity not applied** | Content stream ไม่ได้อ้างอิงสถานะใหม่. | แทรก `/GS0 gs` ก่อนคำสั่งวาดใด ๆ ที่ต้องการให้มีผล. | +| **Blend mode ignored** | Viewer ไม่รองรับ blend mode บางประเภท. | ใช้โหมดที่รองรับทั่วไปเช่น `"Normal"` หรือ `"Multiply"` เพื่อความเข้ากันได้สูงสุด. | +| **Multiple pages need the same state** | แก้ไขเพียงหน้าแรกเท่านั้น. | วนลูป `pdfDocument.Pages` และทำซ้ำขั้นตอนที่ 2‑5 สำหรับแต่ละหน้า. | + +## ตัวอย่างการทำงานเต็มรูปแบบ + +ด้านล่างเป็นโปรแกรมที่พร้อมคัดลอก‑วางครบถ้วน ซึ่งรวมทุกขั้นตอน, การจัดการข้อผิดพลาด, และการสาธิตการใช้ ExtGState ใหม่. + + + +## สิ่งที่คุณควรเรียนต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้. แต่ละแหล่งข้อมูลมีตัวอย่างโค้ดทำงานเต็มรูปแบบพร้อมคำอธิบายขั้นตอนเพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการทำงานอื่น ๆ ในโครงการของคุณเอง. + +- [วิธีเพิ่มวัตถุเส้นใน PDF โดยใช้ Aspose.PDF for .NET: คู่มือขั้นตอนที่ละเอียด](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [เพิ่ม Image Stamps ไปยัง PDF โดยใช้ Aspose.PDF for .NET: คู่มือขั้นตอนที่ละเอียด](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [วิธีเพิ่มรูปภาพไปยัง PDF โดยใช้ Aspose.PDF for .NET: คู่มือขั้นตอนที่ละเอียด](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/turkish/net/images-graphics/_index.md b/pdf/turkish/net/images-graphics/_index.md index 069d9eaa9f..b9bd160e80 100644 --- a/pdf/turkish/net/images-graphics/_index.md +++ b/pdf/turkish/net/images-graphics/_index.md @@ -164,6 +164,9 @@ Aspose.PDF for .NET kullanarak PDF belgelerindeki görüntüleri nasıl sıkış ### [.NET için Aspose.PDF Kullanarak PDF'lerde Görüntü Arka Planları Ayarlama: Kapsamlı Bir Kılavuz](./aspose-pdf-net-set-image-backgrounds/) Aspose.PDF for .NET kullanarak görüntü arka planları ayarlayarak PDF belgelerinizi nasıl geliştireceğinizi öğrenin. Bu kılavuz kurulum, uygulama ve optimizasyon ipuçlarını kapsar. +### [Aspose.Pdf ile PDF'ye ExtGState Ekleme – Tam Kılavuz](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Aspose.Pdf kullanarak PDF belgelerine ExtGState ekleyerek şeffaflık ve render ayarlarını nasıl kontrol edeceğinizi öğrenin. + ## Ek Kaynaklar - [Net Belgeleme için Aspose.PDF](https://docs.aspose.com/pdf/net/) diff --git a/pdf/turkish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/turkish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..b4b647b893 --- /dev/null +++ b/pdf/turkish/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Aspose.Pdf kullanarak PDF'ye ExtGState eklemeyi öğrenin. Bu adım adım + kılavuz, grafik durumu sözlüğü, PDF kaynakları düzenleme ve karışım modu ayarlarını + kapsar. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: tr +lastmod: 2026-07-07 +og_description: Aspose.Pdf kullanarak PDF'ye ExtGState ekleyin. PDF kaynaklarını değiştirmek, + bir grafik durumu sözlüğü oluşturmak, opaklığı ve karışım modunu ayarlamak ve sonucu + kaydetmek için bu kılavuzu izleyin. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: PDF'ye ExtGState Ekle – Aspose.Pdf Adım Adım Öğretici +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Aspose.Pdf ile PDF'ye ExtGState Ekle – Tam Rehber +url: /tr/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF'ye ExtGState Ekle – Tam Programlama Rehberi + +PDF'ye **ExtGState eklemeye** ihtiyaç duydunuz ama hangi API çağrılarını kullanacağınızdan emin değildiniz mi? Yalnız değilsiniz. Bu öğreticide, **Aspose.Pdf** kullanarak sayfa kaynaklarını nasıl ayarlayacağımızı, özel bir **grafik durumu sözlüğü** oluşturacağımızı ve opaklık ile karışım modunu ayarlayacağımızı adım adım göstereceğiz—hepsi sadece birkaç C# satırıyla. + +Öncelikle mevcut bir PDF'yi yükleyerek başlayacağız, ardından **PDF kaynaklarına** dalacağız, yeni bir ExtGState girişi ekleyeceğiz ve son olarak değiştirilmiş belgeyi kaydedeceğiz. Sonunda, ince ayarlı grafik kontrolüne ihtiyaç duyan herhangi bir .NET projesine ekleyebileceğiniz yeniden kullanılabilir bir kod parçacığına sahip olacaksınız. + +## Gereksinimler + +- .NET 6 (veya herhangi bir yeni .NET Framework sürümü) +- **Aspose.Pdf for .NET** NuGet paketi (`Aspose.Pdf`) +- Referans alabileceğiniz bir klasöre yerleştirilmiş bir giriş PDF'i (`input.pdf`) +- C# sözdizimi hakkında temel bir anlayış (PDF iç yapıları hakkında derin bilgi gerekmez) + +Eğer bunlara sahipseniz, hemen başlayalım. + +![Aspose.Pdf kullanarak PDF'ye ExtGState ekleme](placeholder.png){alt="Aspose.Pdf kullanarak PDF'ye ExtGState ekleme"} + +## Adım 1: PDF'ye ExtGState Ekle – Belgeyi Yükle + +İlk yapmamız gereken, değiştirmek istediğimiz PDF'yi açmaktır. Bir `using` bloğu kullanmak, dosya tutamacının otomatik olarak serbest bırakılmasını sağlar; bu, aynı dosyayı daha sonra üzerine yazdığınızda özellikle kullanışlıdır. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Neden önemli:* Dosyayı yüklemek, her sayfanın **PDF kaynaklarının** bulunduğu `Pages` koleksiyonuna erişmenizi sağlar. Belgeyi açmadan ExtGState sözlüğüne dokunamazsınız. + +## Adım 2: Aspose.Pdf ile PDF Kaynaklarına Erişin + +Bir PDF'deki her sayfanın, yazı tipleri, görüntüler ve grafik durumlarını tutan bir `/Resources` sözlüğü vardır. İlk sayfanın kaynaklarını almalı ve bunları `DictionaryEditor` içine sarmalamalıyız, böylece girişleri okuyup yazabiliriz. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*İpucu:* PDF'nizde birden fazla sayfa varsa ve aynı ExtGState'i tüm sayfalara eklemeniz gerekiyorsa, `pdfDocument.Pages` üzerinde döngü yaparak aşağıdaki adımları her sayfa için tekrarlayın. + +## Adım 3: Mevcut ExtGState Sözlüğünü Al (veya Oluştur) + +`/ExtGState` girişi zaten mevcut olabilir. Yeni grafik durumumuzu benzersiz bir anahtar altında ekleyebilmek için onu alıyoruz. Eğer mevcut değilse, Aspose.Pdf bir istisna fırlatır; bu yüzden gerektiğinde yeni bir sözlük oluşturarak buna karşı önlem alıyoruz. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Ne oluyor:* `resourcesEditor["ExtGState"]` bir COS nesnesi döndürür; `ToCosPdfDictionary()` çağrısı, üzerine giriş ekleyebileceğimiz değiştirilebilir bir sözlüğe dönüştürür. + +## Adım 4: İstenen Parametrelerle Bir Grafik‑Durumu Sözlüğü Oluşturun + +Şimdi öğreticinin kalbine geliyoruz: çizgi opaklığını (`CA`), dolgu opaklığını (`ca`) ve karışım modunu (`BM`) tanımlayan bir **grafik durumu sözlüğü** oluşturmak. Bu anahtarlar, ExtGState girişleri için PDF spesifikasyonuna uygundur. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Neden ayarlıyoruz:* +- **CA** ve **ca**, mürekkeplerin sayfa arka planıyla nasıl karıştığını kontrol etmenizi sağlar—filigranlama veya yarı saydam kaplamalar için mükemmeldir. +- **BM** (Blend Mode), kaynak ve hedef renklerin nasıl birleştirileceğini belirler; `"Normal"` varsayılan değerdir, ancak yaratıcı etkiler için `"Multiply"` veya `"Screen"` gibi seçeneklere geçebilirsiniz. + +## Adım 5: Yeni ExtGState'i Sayfa Kaynaklarına Ekleyin + +Yeni grafik durumumuza bir ad (`GS0`) veriyoruz ve bunu sayfanın ExtGState sözlüğüne ekliyoruz. Bundan sonra, `/GS0` referansını kullanan herhangi bir içerik akışı, tanımladığımız opaklık ve karışım modunu miras alacaktır. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Köşe durum notu:* `GS0` zaten mevcutsa, Aspose.Pdf üzerine yazar. Kazara çakışmaları önlemek için `"GS_" + Guid.NewGuid().ToString("N")` gibi GUID tabanlı bir ad üretmeyi düşünün. + +## Adım 6: Değiştirilen PDF'yi Kaydedin + +Son olarak, değişiklikleri diske yazıyoruz. Orijinal dosyanın üzerine yazabilir ya da yeni bir kopya oluşturabilirsiniz—iş akışınıza uyanı seçin. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Beklenen sonuç:* `output.pdf` dosyasını herhangi bir PDF görüntüleyicide açın. Daha sonra `GS0` referansını kullanan tüm çizim komutları, %50 dolgu opaklığı ve tam çizgi opaklığıyla, normal karışım modunu kullanarak render edilecektir. + +--- + +## Bonus: Yeni ExtGState'i İçerik Akışında Uygulama + +Sadece ExtGState sözlüğünü eklemek yeterli değildir; PDF içerik akışına bunu kullanmasını söylemelisiniz. İşte yeni oluşturduğumuz durumu kullanarak yarı saydam bir dikdörtgen çizen hızlı bir kod parçacığı: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Açıklama:* +- `q`/`Q` grafik durumu yığınına itme ve çıkarma yapar, böylece değişikliklerimiz diğer öğelere sızmaz. +- `/GS0 gs` eklediğimiz grafik durumunu seçer. +- `re` operatörü bir dikdörtgen çizer ve `B` tanımlı opaklıkla doldurur ve kenarını çizer. + +Dikdörtgen koordinatlarını, renkleri istediğiniz gibi değiştirmekten veya şekli metinle değiştirmekten çekinmeyin—herhangi bir çizim komutu artık ExtGState ayarlarını dikkate alacaktır. + +## Yaygın Tuzaklar ve Nasıl Önlenir + +| Sorun | Neden Olur | Çözüm | +|-------|------------|------| +| **Eksik `/ExtGState` girişi** | Bazı PDF'ler sözlüğü hiç tanımlamaz. | `resourcesEditor.ContainsKey("ExtGState")` kontrol edin; false ise yeni boş bir sözlük oluşturup `resourcesEditor`'a ekleyin. | +| **Opaklık uygulanmadı** | İçerik akışı yeni durumu hiç referans almaz. | Etkilenmesini istediğiniz tüm çizim komutlarından önce `/GS0 gs` ekleyin. | +| **Karışım modu yoksayıldı** | Görüntüleyici belirli karışım modlarını desteklemez. | Maksimum uyumluluk için `"Normal"` veya `"Multiply"` gibi yaygın desteklenen modları kullanın. | +| **Birden fazla sayfa aynı durumu gerektiriyor** | Sadece ilk sayfa düzenlendi. | `pdfDocument.Pages` üzerinde döngü yapın ve her sayfa için adım 2‑5'i tekrarlayın. | + +## Tam Çalışan Örnek + +Aşağıda, tüm adımları, hata yönetimini ve yeni ExtGState'in kullanımını gösteren, kopyala‑yapıştır hazır tam program yer almaktadır: + + + +## Sonra Ne Öğrenmelisiniz? + +Aşağıdaki öğreticiler, bu rehberde gösterilen tekniklere dayanan ve yakından ilgili konuları kapsar. Her kaynak, ek API özelliklerini öğrenmenize ve kendi projelerinizde alternatif uygulama yaklaşımlarını keşfetmenize yardımcı olacak adım adım açıklamalar içeren tam çalışan kod örnekleri sunar. + +- [Aspose.PDF for .NET Kullanarak PDF'ye Çizgi Nesnesi Ekleme: Adım Adım Kılavuz](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Aspose.PDF for .NET Kullanarak PDF'lere Görüntü Damgaları Ekleme: Adım Adım Kılavuz](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Aspose.PDF for .NET Kullanarak PDF'lere Görüntü Ekleme: Adım Adım Kılavuz](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/images-graphics/_index.md b/pdf/vietnamese/net/images-graphics/_index.md index 70b79a3d3f..a566f4c42b 100644 --- a/pdf/vietnamese/net/images-graphics/_index.md +++ b/pdf/vietnamese/net/images-graphics/_index.md @@ -164,6 +164,9 @@ Tìm hiểu cách chuyển các tập lệnh LaTeX phức tạp thành tài li ### [Đặt hình nền ảnh trong PDF bằng Aspose.PDF cho .NET: Hướng dẫn toàn diện](./aspose-pdf-net-set-image-backgrounds/) Tìm hiểu cách cải thiện tài liệu PDF của bạn bằng cách thiết lập hình nền bằng Aspose.PDF cho .NET. Hướng dẫn này bao gồm các mẹo thiết lập, triển khai và tối ưu hóa. +### [Thêm ExtGState vào PDF bằng Aspose.Pdf – Hướng dẫn toàn diện](./add-extgstate-to-pdf-with-aspose-pdf-complete-guide/) +Tìm hiểu cách áp dụng ExtGState để kiểm soát độ trong suốt và các hiệu ứng đồ họa trong PDF bằng Aspose.Pdf cho .NET. + ## 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/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md b/pdf/vietnamese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..8ad4349763 --- /dev/null +++ b/pdf/vietnamese/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-07-07 +description: Tìm hiểu cách thêm ExtGState vào PDF bằng Aspose.Pdf. Hướng dẫn từng + bước này bao gồm từ điển trạng thái đồ họa, chỉnh sửa tài nguyên PDF và cài đặt + chế độ pha trộn. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add extgstate to pdf +- Aspose.Pdf +- graphics state dictionary +- PDF resources +- blend mode +language: vi +lastmod: 2026-07-07 +og_description: Thêm ExtGState vào PDF bằng Aspose.Pdf. Tham khảo hướng dẫn này để + chỉnh sửa tài nguyên PDF, tạo từ điển trạng thái đồ họa, thiết lập độ trong suốt + và chế độ pha trộn, và lưu kết quả. +og_image_alt: Screenshot showing Aspose.Pdf code to add ExtGState to a PDF document +og_title: Thêm ExtGState vào PDF – Hướng dẫn từng bước Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-07-07' + description: Learn how to add ExtGState to PDF using Aspose.Pdf. This step‑by‑step + guide covers graphics state dictionary, PDF resources editing, and blend mode + settings. + headline: Add ExtGState to PDF with Aspose.Pdf – Complete Guide + type: TechArticle +tags: +- Aspose.Pdf +- PDF manipulation +- C# +- ExtGState +title: Thêm ExtGState vào PDF với Aspose.Pdf – Hướng dẫn đầy đủ +url: /vi/net/images-graphics/add-extgstate-to-pdf-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Thêm ExtGState vào PDF – Hướng dẫn lập trình đầy đủ + +Bạn đã bao giờ cần **add ExtGState to PDF** nhưng không chắc nên dùng API nào? Bạn không phải là người duy nhất. Trong hướng dẫn này, chúng tôi sẽ đi qua các bước chính xác bằng cách sử dụng **Aspose.Pdf** để điều chỉnh tài nguyên trang, tạo một **graphics state dictionary** tùy chỉnh, và đặt độ trong suốt và chế độ hòa trộn — chỉ trong vài dòng C#. + +Chúng tôi sẽ bắt đầu bằng cách tải một PDF hiện có, sau đó khám phá **PDF resources** của nó, chèn một mục ExtGState mới, và cuối cùng lưu tài liệu đã chỉnh sửa. Khi kết thúc, bạn sẽ có một đoạn mã có thể tái sử dụng để chèn vào bất kỳ dự án .NET nào cần kiểm soát đồ họa chi tiết. + +## Những gì bạn cần + +- .NET 6 (hoặc bất kỳ phiên bản .NET Framework gần đây nào) +- Gói NuGet **Aspose.Pdf for .NET** (`Aspose.Pdf`) +- Một file PDF đầu vào (`input.pdf`) đặt trong thư mục bạn có thể tham chiếu +- Kiến thức cơ bản về cú pháp C# (không yêu cầu hiểu sâu về cấu trúc PDF) + +Nếu bạn đã có những thứ trên, hãy bắt đầu nào. + +![Add ExtGState to PDF using Aspose.Pdf](placeholder.png){alt="Thêm ExtGState vào PDF bằng Aspose.Pdf"} + +## Bước 1: Thêm ExtGState vào PDF – Tải tài liệu + +Điều đầu tiên chúng ta phải làm là mở PDF mà chúng ta muốn chỉnh sửa. Sử dụng khối `using` đảm bảo tay cầm file được giải phóng tự động, điều này đặc biệt hữu ích khi bạn ghi đè lại file cùng một lúc. + +```csharp +using (var pdfDocument = new Aspose.Pdf.Document("YOUR_DIRECTORY/input.pdf")) +{ + // The document is now loaded and ready for manipulation. +``` + +*Tại sao điều này quan trọng:* Việc tải file cho phép bạn truy cập vào bộ sưu tập `Pages`, nơi chứa **PDF resources** của mỗi trang. Nếu không mở tài liệu, bạn không thể thao tác với từ điển ExtGState. + +## Bước 2: Truy cập PDF Resources bằng Aspose.Pdf + +Mỗi trang trong PDF đều có một từ điển `/Resources` chứa phông chữ, hình ảnh và trạng thái đồ họa. Chúng ta cần lấy tài nguyên của trang đầu tiên và bọc chúng trong một `DictionaryEditor` để có thể đọc và ghi các mục. + +```csharp + // Step 2: Get the first page's resources dictionary + var firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new Aspose.Pdf.DictionaryEditor(firstPage.Resources); +``` + +*Mẹo chuyên nghiệp:* Nếu PDF của bạn có nhiều trang và bạn cần cùng một ExtGState cho tất cả, hãy lặp qua `pdfDocument.Pages` và lặp lại các bước sau cho mỗi trang. + +## Bước 3: Lấy từ điển ExtGState hiện có (hoặc tạo mới) + +Mục `/ExtGState` có thể đã tồn tại. Chúng ta lấy nó để có thể thêm trạng thái đồ họa mới của mình dưới một khóa duy nhất. Nếu nó không tồn tại, Aspose.Pdf sẽ ném lỗi, vì vậy chúng ta phòng ngừa bằng cách tạo một từ điển mới khi cần. + +```csharp + // Step 3: Retrieve the existing ExtGState dictionary + var extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +``` + +*Điều gì đang xảy ra:* `resourcesEditor["ExtGState"]` trả về một đối tượng COS; gọi `ToCosPdfDictionary()` chuyển nó thành một từ điển có thể sửa đổi mà chúng ta có thể thêm các mục vào. + +## Bước 4: Xây dựng Graphics‑State Dictionary với các tham số mong muốn + +Bây giờ là phần cốt lõi của hướng dẫn: xây dựng một **graphics state dictionary** định nghĩa độ trong suốt nét vẽ (`CA`), độ trong suốt tô (`ca`), và chế độ hòa trộn (`BM`). Các khóa này tuân theo đặc tả PDF cho các mục ExtGState. + +```csharp + // Step 4: Create a new graphics‑state dictionary with desired parameters + var newGraphicsState = Aspose.Pdf.CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + var graphicsStateEntries = new[] + { + new KeyValuePair("CA", + new Aspose.Pdf.CosPdfNumber(1)), // Stroke opacity (1 = fully opaque) + new KeyValuePair("ca", + new Aspose.Pdf.CosPdfNumber(0.5)), // Fill opacity (0.5 = 50% transparent) + new KeyValuePair("BM", + new Aspose.Pdf.CosPdfName("Normal")) // Blend mode (standard normal blending) + }; + + foreach (var entry in graphicsStateEntries) + newGraphicsState.Add(entry); +``` + +*Tại sao chúng ta đặt các giá trị này:* +- **CA** và **ca** cho phép bạn kiểm soát cách mực hòa trộn với nền trang — hoàn hảo cho việc tạo watermark hoặc lớp phủ bán trong suốt. +- **BM** (Blend Mode) xác định cách màu nguồn và màu đích kết hợp; `"Normal"` là mặc định, nhưng bạn có thể chuyển sang `"Multiply"` hoặc `"Screen"` để tạo hiệu ứng sáng tạo. + +## Bước 5: Chèn ExtGState mới vào tài nguyên trang + +Chúng tôi đặt tên cho trạng thái đồ họa mới (`GS0`) và chèn nó vào từ điển ExtGState của trang. Từ bây giờ, bất kỳ luồng nội dung nào tham chiếu tới `/GS0` sẽ kế thừa độ trong suốt và chế độ hòa trộn mà chúng ta vừa định nghĩa. + +```csharp + // Step 5: Add the new ExtGState to the page resources under a chosen name + extGStateDict.Add("GS0", newGraphicsState); +``` + +*Lưu ý trường hợp đặc biệt:* Nếu `GS0` đã tồn tại, Aspose.Pdf sẽ ghi đè lên nó. Để tránh va chạm không mong muốn, hãy cân nhắc tạo tên dựa trên GUID như `"GS_" + Guid.NewGuid().ToString("N")`. + +## Bước 6: Lưu PDF đã chỉnh sửa + +Cuối cùng, chúng ta ghi các thay đổi trở lại đĩa. Bạn có thể ghi đè lên file gốc hoặc tạo một bản sao mới — tùy theo quy trình làm việc của bạn. + +```csharp + // Step 6: Save the modified PDF + pdfDocument.Save("YOUR_DIRECTORY/output.pdf"); +} +``` + +*Kết quả mong đợi:* Mở `output.pdf` bằng bất kỳ trình xem PDF nào. Bất kỳ lệnh vẽ nào sau này tham chiếu tới `GS0` sẽ được hiển thị với độ trong suốt tô 50 % và độ trong suốt nét vẽ đầy đủ, sử dụng chế độ hòa trộn bình thường. + +--- + +## Bonus: Áp dụng ExtGState mới trong Content Stream + +Chỉ thêm từ điển ExtGState là chưa đủ; bạn phải chỉ cho content stream của PDF sử dụng nó. Dưới đây là một đoạn mã nhanh vẽ một hình chữ nhật bán trong suốt bằng trạng thái chúng ta vừa tạo: + +```csharp +// Assuming 'firstPage' is still in scope +var content = firstPage.Contents[1]; // Get the first content stream +content.Add("q\n"); // Save graphics state +content.Add("/GS0 gs\n"); // Apply our ExtGState +content.Add("0.5 0 0 0.5 100 500 cm\n"); // Scale and position +content.Add("0 0 200 100 re\n"); // Rectangle +content.Add("0.2 0.6 0.8 rg\n"); // Fill color (RGB) +content.Add("B\n"); // Fill and stroke +content.Add("Q\n"); // Restore graphics state +``` + +*Giải thích:* +- `q`/`Q` đẩy và bật ngăn xếp trạng thái đồ họa, đảm bảo các thay đổi của chúng ta không lan ra các phần tử khác. +- `/GS0 gs` chọn trạng thái đồ họa mà chúng ta đã thêm. +- Toán tử `re` vẽ một hình chữ nhật, và `B` tô và nét vẽ nó bằng độ trong suốt đã định nghĩa. + +Bạn có thể tự do điều chỉnh tọa độ, màu sắc của hình chữ nhật, hoặc thậm chí thay thế hình dạng bằng văn bản — bất kỳ lệnh vẽ nào bây giờ sẽ tuân theo cài đặt ExtGState. + +## Những lỗi thường gặp & Cách tránh + +| Vấn đề | Nguyên nhân | Cách khắc phục | +|-------|-------------|----------------| +| **Missing `/ExtGState` entry** | Một số PDF không bao giờ định nghĩa từ điển này. | Kiểm tra `resourcesEditor.ContainsKey("ExtGState")` trước khi truy cập; nếu false, tạo một từ điển rỗng mới và thêm vào `resourcesEditor`. | +| **Opacity not applied** | Luồng nội dung không bao giờ tham chiếu tới trạng thái mới. | Chèn `/GS0 gs` trước bất kỳ lệnh vẽ nào bạn muốn ảnh hưởng. | +| **Blend mode ignored** | Trình xem không hỗ trợ một số chế độ hòa trộn. | Dùng các chế độ được hỗ trợ rộng rãi như `"Normal"` hoặc `"Multiply"` để tương thích tối đa. | +| **Multiple pages need the same state** | Chỉ trang đầu tiên được chỉnh sửa. | Lặp qua `pdfDocument.Pages` và lặp lại các bước 2‑5 cho mỗi trang. | + +## Ví dụ hoàn chỉnh + +Dưới đây là chương trình hoàn chỉnh, sẵn sàng sao chép‑dán, bao gồm tất cả các bước, xử lý lỗi, và một ví dụ minh họa việc sử dụng ExtGState mới. + + + +## Bạn nên học gì tiếp theo? + +Các hướng dẫn sau đây bao gồm các chủ đề liên quan chặt chẽ, xây dựng trên các kỹ thuật được trình bày trong hướng dẫn này. Mỗi tài nguyên bao gồm các ví dụ mã hoàn chỉnh cùng giải thích từng bước để giúp bạn nắm vững các tính năng API bổ sung và khám phá các cách triển khai thay thế trong dự án của mình. + +- [Cách Thêm Đối Tượng Đường Thẳng trong PDF Sử dụng Aspose.PDF cho .NET: Hướng Dẫn Từng Bước](/pdf/english/net/document-manipulation/add-line-aspose-pdf-dotnet-tutorial/) +- [Thêm Dấu Ảnh vào PDF Sử dụng Aspose.PDF cho .NET: Hướng Dẫn Từng Bước](/pdf/english/net/images-graphics/add-image-stamp-to-pdf-aspose-dotnet/) +- [Cách Thêm Hình Ảnh vào PDF Sử dụng Aspose.PDF cho .NET: Hướng Dẫn Từng Bước](/pdf/english/net/images-graphics/add-images-to-pdfs-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file