Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 15 additions & 16 deletions .github/workflows/production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,24 +59,23 @@ jobs:
run: hugo --configDir config/watermark --environment production --minify

# Configure AWS credentials
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.SECRET_ACCESS }}
aws-region: us-west-2
- name: Deploy to S3 using AWS CLI
- name: Sync to Ceph S3
run: |
aws s3 sync public/ s3://${{ secrets.S3_BUCKET }}/watermark/ \
aws s3 sync ./public/ s3://tutorials-groupdocs-com/watermark/ \
--endpoint-url https://s3.dynabic.com \
--acl public-read \
--delete \
--exclude "*.map" \
--cache-control "public, max-age=3600"
# Invalidate Cloudfront
- name: invalidate
uses: chetan/invalidate-cloudfront-action@v2
env:
DISTRIBUTION: ${{ secrets.AWS_DISTRIBUTION_PROD }}
PATHS: /watermark/*
AWS_REGION: 'us-west-2'
AWS_ACCESS_KEY_ID: ${{ secrets.ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SECRET_ACCESS }}
AWS_ACCESS_KEY_ID: ${{ secrets.CEPH_S3_LIVE_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.CEPH_S3_LIVE_SECRET_KEY }}
AWS_DEFAULT_REGION: us-east-1
AWS_ENDPOINT_URL: https://s3-admin.dynabic.com

- name: Purge BunnyCDN Cache
run: |
curl -siG \
-H "X-Api-Key: ${{ secrets.BUNNY_API_KEY }}" \
--data-urlencode "url=https://tutorials.groupdocs.com/watermark" \
"https://api.dynabic.com/bn/purge?async=true"
31 changes: 18 additions & 13 deletions .github/workflows/staging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,17 +54,22 @@ jobs:
- name: Build
run: hugo --configDir config/watermark --environment staging --minify

- name: Deploy apiqa-tutorials.groupdocs.com(tutorials-watermark)(family)(Stage) to S3
run: hugo --configDir config/watermark --environment staging deploy --target "Stage" --maxDeletes 0
- name: Sync to Ceph S3
run: |
aws s3 sync ./public/ s3://qa-tutorials-groupdocs-com/watermark/ \
--endpoint-url https://s3-qa.dynabic.com \
--acl public-read \
--delete
env:
AWS_ACCESS_KEY_ID: ${{ secrets.ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SECRET_ACCESS }}
# Invalidate Cloudfront
- name: invalidate
uses: chetan/invalidate-cloudfront-action@v2
env:
DISTRIBUTION: ${{ secrets.AWS_DISTRIBUTION }}
PATHS: /watermark/*
AWS_REGION: 'us-west-2'
AWS_ACCESS_KEY_ID: ${{ secrets.ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SECRET_ACCESS }}
AWS_ACCESS_KEY_ID: ${{ secrets.CEPH_S3_QA_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.CEPH_S3_QA_SECRET_KEY }}
AWS_DEFAULT_REGION: us-east-1
AWS_ENDPOINT_URL: https://s3-admin-qa.dynabic.com

- name: Purge BunnyCDN Cache
run: |
curl -siG \
-H "X-Api-Key: ${{ secrets.BUNNY_API_KEY }}" \
--data-urlencode "url=https://qa-tutorials.groupdocs.com/watermark" \
"https://api.dynabic.com/bn/purge?async=true"

Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
---
date: '2026-02-18'
description: تعلم كيفية استبدال صور المخططات في Java باستخدام GroupDocs.Watermark
for Java — أتمتة التحديثات، تعزيز الكفاءة، وضمان الدقة في سير عملك.
keywords:
- GroupDocs Watermark Java
- automate image replacement
- Java diagram watermarking
title: كيفية استبدال صور المخطط في جافا باستخدام GroupDocs.Watermark
type: docs
url: /ar/java/diagram-document-watermarking/automate-image-replacement-groupdocs-watermark-java/
weight: 1
---

# استبدال صور المخططات java باستخدام GroupDocs.Watermark للـ Java

تحديث الصور داخل المخططات على نمط Visio يمكن أن يكون مهمة شاقة وعرضة للأخطاء—خاصةً عندما يكون لديك العشرات من الملفات التي تحتاج إلى الحفاظ على توافقها مع إرشادات العلامة التجارية أو تحديثات المنتج. في هذا الدرس ستتعلم **كيفية استبدال صور المخططات java** باستخدام مكتبة GroupDocs.Watermark القوية. سنستعرض إعداد البيئة، الوصول إلى أشكال المخطط، استبدال الصور، وحفظ النتيجة، كل ذلك بشرح واضح ومحادث.

## إجابات سريعة
- **ما المكتبة التي يمكنها استبدال صور المخططات في Java؟** GroupDocs.Watermark للـ Java.
- **هل أحتاج إلى ترخيص؟** الإصدار التجريبي المجاني يكفي للتطوير؛ يلزم ترخيص إنتاج للاستخدام التجاري.
- **ما صيغ الملفات المدعومة؟** Visio (.vsdx, .vsd) وأنواع أخرى من المخططات يدعمها المكتبة.
- **كم من الوقت تستغرق عملية التنفيذ؟** حوالي 15 دقيقة لسكريبت استبدال صورة أساسي.
- **هل يمكنني معالجة عدة مخططات دفعةً واحدة؟** نعم—ما عليك سوى تكرار الملفات باستخدام نفس منطق Watermarker.

## ما هو “replace diagram images java”؟
“replace diagram images java” يشير إلى عملية البحث برمجياً عن الأشكال التي تحتوي على صور داخل ملف المخطط واستبدال الصورة المضمنة بصورة جديدة، كل ذلك من خلال كود Java. هذا يلغي الحاجة إلى التحرير اليدوي في Visio أو أدوات مشابهة ويضمن التناسق عبر مجموعات كبيرة من المستندات.

## لماذا نستخدم GroupDocs.Watermark لهذه المهمة؟
- **الأتمتة أولاً**: يتعامل مع آلاف الملفات ببضع أسطر من الكود.
- **لا حاجة لواجهة مستخدم**: يعمل بدون واجهة (head‑less) على الخوادم، خطوط CI، أو تطبيقات سطح المكتب.
- **نموذج محتوى غني**: يوفر تجريدات قوية (DiagramContent, DiagramShape) تتيح لك استهداف الأشكال المطلوبة بدقة.
- **متعدد المنصات**: يعمل على أي بيئة متوافقة مع JVM (Windows, Linux, macOS).

## المتطلبات المسبقة
- JDK 8 أو أحدث مثبت.
- Maven (أو إدارة JAR يدويًا) لإدارة الاعتمادات.
- معرفة أساسية بـ Java وإلمام بملفات الإدخال/الإخراج.

### المكتبات المطلوبة، الإصدارات، والاعتمادات
أضف مستودع GroupDocs واعتماد Watermark إلى ملف `pom.xml` الخاص بك:

```xml
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/watermark/java/</url>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-watermark</artifactId>
<version>24.11</version>
</dependency>
</dependencies>
```

يمكنك أيضًا تنزيل أحدث JAR مباشرةً من [GroupDocs.Watermark for Java releases](https://releases.groupdocs.com/watermark/java/).

يتوفر ترخيص تجريبي مجاني، ويمكن شراء ترخيص دائم من [GroupDocs](https://purchase.groupdocs.com/temporary-license/).

## تنفيذ خطوة بخطوة

### 1. تهيئة Watermarker
أولاً، أنشئ كائن `Watermarker` يشير إلى المخطط الذي تريد تحريره.

```java
import java.io.File;
import com.groupdocs.watermark.Watermarker;
import com.groupdocs.watermark.options.DiagramLoadOptions;

public class FeatureWatermarkerInitialization {
public static void run() throws Exception {
DiagramLoadOptions loadOptions = new DiagramLoadOptions();
String documentPath = "YOUR_DOCUMENT_DIRECTORY/diagram.vsdx";
Watermarker watermarker = new Watermarker(documentPath, loadOptions);
}
}
```

*لماذا هذا مهم*: تحميل الملف باستخدام `DiagramLoadOptions` يخبر المكتبة بمعالجة المصدر كمخطط، مما يتيح الوصول إلى مستوى الأشكال.

### 2. الوصول إلى محتوى المخطط
استرجع التمثيل الداخلي (`DiagramContent`) حتى تتمكن من تعداد الصفحات والأشكال.

```java
import com.groupdocs.watermark.Watermarker;
import com.groupdocs.watermark.contents.DiagramContent;

public class FeatureAccessDiagramContent {
public static void run(Watermarker watermarker) throws Exception {
DiagramContent content = watermarker.getContent(DiagramContent.class);
}
}
```

*نصيحة احترافية*: حافظ على بقاء كائن `Watermarker` فعالًا أثناء العمل مع `DiagramContent`؛ إغلاقه مبكرًا سيؤدي إلى إبطال كائن المحتوى.

### 3. استبدال صور الأشكال
قم بالتكرار على الأشكال في الصفحة الأولى (يمكنك توسيع ذلك ليشمل جميع الصفحات) واستبدل أي صورة موجودة بصورة PNG جديدة.

```java
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import com.groupdocs.watermark.contents.DiagramShape;
import com.groupdocs.watermark.contents.DiagramWatermarkableImage;
import com.groupdocs.watermark.contents.DiagramContent;

public class FeatureReplaceShapeImages {
public static void run(DiagramContent content) throws Exception {
for (DiagramShape shape : content.getPages().get_Item(0).getShapes()) {
if (shape.getImage() != null) {
File imageFile = new File("YOUR_DOCUMENT_DIRECTORY/test.png");
byte[] imageBytes = new byte[(int) imageFile.length()];
InputStream imageInputStream = new FileInputStream(imageFile);
imageInputStream.read(imageBytes);
imageInputStream.close();

shape.setImage(new DiagramWatermarkableImage(imageBytes));
}
}
}
}
```

*شرح*:
- `shape.getImage()` يتحقق مما إذا كان الشكل يحتوي بالفعل على صورة.
- نقوم بقراءة PNG البديل إلى مصفوفة بايت ونغلفها في `DiagramWatermarkableImage`.
- `shape.setImage(...)` يستبدل الصورة القديمة بالجديدة.

### 4. حفظ التغييرات وتنظيف الموارد
بعد إتمام جميع الاستبدالات، احفظ المخطط وأطلق الموارد.

```java
import com.groupdocs.watermark.Watermarker;

public class FeatureSaveAndCloseWatermarker {
public static void run(Watermarker watermarker) throws Exception {
String outputPath = "YOUR_OUTPUT_DIRECTORY/output.vsdx";
watermarker.save(outputPath);
watermarker.close();
}
}
```

الحفظ يكتب المخطط المحدث إلى القرص، و`close()` يمنع تسرب مقبض الملف—وهو أمر حاسم لمعالجة الدفعات.

## تطبيقات عملية
- **العلامة التجارية للشركة** – تحديث الشعارات عبر جميع المخططات التنظيمية باستخدام سكريبت واحد.
- **توثيق المنتج** – تجديد صور المكونات عند إصدار أجهزة جديدة.
- **الموارد التعليمية** – استبدال المخططات القديمة بأحدث الرسوم العلمية.

## الأداء وأفضل الممارسات
- **معالجة ملف واحد في كل مرة** عند التعامل مع مخططات كبيرة للحفاظ على استهلاك الذاكرة منخفضًا.
- **إغلاق التدفقات فورًا** (كما هو موضح) لتجنب مشاكل قفل الملفات.
- **تحليل أداء I/O** إذا كنت تتعامل مع مئات الملفات؛ فكر في استخدام مجموعة خيوط (thread‑pool) مع تحكم في التزامن.

## المشكلات الشائعة والحلول

| العَرَض | السبب المحتمل | الحل |
|---------|--------------|-----|
| `NullPointerException` على `shape.getImage()` | فهرس صفحة المخطط خارج النطاق | تأكد من وجود الصفحة (`content.getPages().size() > 0`) قبل التكرار. |
| الصورة تظهر مشوهة بعد الاستبدال | صورة الإدخال لها DPI مختلف | استخدم PNG بأبعاد/DPI مشابهة للأصل، أو أعد تحجيمه قبل التحميل. |
| LicenseException أثناء التشغيل | انتهت صلاحية النسخة التجريبية أو لا يوجد ترخيص | طبق ملف ترخيص صالح عبر `License.setLicense("path/to/license.json");` قبل إنشاء `Watermarker`. |

## الأسئلة المتكررة

**س: هل يمكنني استبدال الصور في جميع صفحات المخطط؟**
ج: نعم—قم بالتكرار على `content.getPages()` وطبق نفس منطق الاستبدال على كل صفحة.

**س: هل تدعم المكتبة صيغ صور أخرى (مثل JPEG, BMP)؟**
ج: بالتأكيد. قدم بايتات الصورة بأي صيغة مدعومة؛ سيقوم الـ API بمعالجة التحويل.

**س: هل يمكن استبدال أشكال محددة فقط (مثل تلك التي لها اسم معين)؟**
ج: نعم. كل `DiagramShape` يحتوي على خصائص مثل `getName()` أو بيانات تعريف مخصصة يمكنك تصفيتها قبل استبدال الصورة.

**س: كيف يمكن تشغيل هذا الكود على خادم Linux بدون واجهة رسومية؟**
ج: GroupDocs.Watermark يعمل بالكامل بدون واجهة (head‑less)؛ لا تحتاج إلى مكونات GUI. فقط تأكد من وجود JDK والـ JARs المطلوبة في مسار الفئة (classpath).

**س: ما هو إصدار GroupDocs.Watermark المطلوب؟**
ج: المثال يستخدم الإصدار 24.11، وهو أحدث إصدار مستقر وقت كتابة المقال.

## الخلاصة
أنت الآن تمتلك سير عمل كامل وجاهز للإنتاج لـ **replace diagram images java** باستخدام GroupDocs.Watermark. دمج هذه القطع البرمجية في خط بناءك، معالجة دفعات من مجلدات المخططات، أو إتاحة المنطق عبر خدمة REST لأتمتة تحديثات العلامة التجارية عبر مؤسستك.

---

**آخر تحديث:** 2026-02-18
**تم الاختبار مع:** GroupDocs.Watermark 24.11 للـ Java
**المؤلف:** GroupDocs
Loading