الدرس التالي سوف أشرح لكم كيف يتم عمل دمج لصورتين مع بعضها البعض حيث تعلمون اي كتاب أو مجلة أو صحيفة دائما يكون الصفحة الرئيسية لوحدها والأخيرة لوحدها وما بينهم يتم عرض الصفحتين مع بعضهم البعض وهذا ما سوف أقوم بشرحه لكم لكيفية عمل ذلك وهي عملية بسيطة جدا وسهلة وتعتمد الكثير من الأمثلة التي تم وضعها بالسابق وسوف نستخدمها هنا ضمن أمثلتنا.
الكود التالي كود الصفحة التي سوف تعرض لنا على المتصفح الصورتين التي سوف نقوم بدمجهما مع بعضهم البعض:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim Bitmap As Bitmap
Bitmap = New Bitmap(Global.PDFSystem.MergeImage("pdf/alkhaleej.pdf", 20, 2))
Bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)
Bitmap.Dispose()
Response.End()
End Subفي المثال الأعلى قمنا باستدعاء الدالة MergeImage وقمنا بتمرير لها المتغيرات مقياس الصورة ومسار ملف PDF وكذلك رقم الصفحة لكن لم نضع رقم الصفحة الأخرى حيث سوف تقوم الدالة MergeImage لوحدها بشكل تلقائي معرفة الصفحة التي يجب ان يتم دمجها معها، وهذا كود الدالة MergeImage التي قمنا باستدعائها :
Public Shared Function MergeImage(ByVal FileSrc As String, ByVal dpi As Integer, ByVal PageIndex As Integer) As Bitmap
Dim TotalPage As Integer = GetTotalPage(FileSrc)
Dim Bitmap As Bitmap
If PageIndex = 1 Or TotalPage = PageIndex Then
Bitmap = getpage(PageIndex, dpi, FileSrc)
ElseIf TotalPage Mod 2 = 0 Then
Dim Bitmap1 As Bitmap
Dim Bitmap2 As Bitmap
Bitmap1 = getpage(PageIndex + 1, dpi, FileSrc)
Bitmap2 = getpage(PageIndex, dpi, FileSrc)
Bitmap = compositing(Bitmap1, Bitmap2)
Else
Dim Bitmap1 As Bitmap
Dim Bitmap2 As Bitmap
Bitmap1 = getpage(PageIndex, dpi, FileSrc)
Bitmap2 = getpage(PageIndex - 1, dpi, FileSrc)
Bitmap = compositing(Bitmap1, Bitmap2)
End If
Return Bitmap
End Functionكما تلاحظن هنا بالكود التالي:
Dim TotalPage As Integer = GetTotalPage(FileSrc)
قمنا بالحصول على عدد صفحات ملف PDF والذي تم تعريفها من الدروس السابقة لكيفية الحصول على عدد الصفحات لكل ملف على حده.
If PageIndex = 1 Or TotalPage = PageIndex Then
Bitmap = getpage(PageIndex, dpi, FileSrc)هنا نقوم باستخدام جملة IF الشرطية لمعرفة رقم الصفحة التي نود عرضها هل هي تساوي رقم 1 او مجموع عدد صفحات الملف حيث أنه كما أسلفنا سابقا بأنه الصفحة الأولى والأخيرة لكل كتاب أو مجلة سوف تعرض بشكل مستقل بدون دمجها مع صفحة اخرى.
ElseIf TotalPage Mod 2 = 0 Then
Dim Bitmap1 As Bitmap
Dim Bitmap2 As Bitmap
Bitmap1 = getpage(PageIndex + 1, dpi, FileSrc)
Bitmap2 = getpage(PageIndex, dpi, FileSrc)
Bitmap = compositing(Bitmap1, Bitmap2)
Else
Dim Bitmap1 As Bitmap
Dim Bitmap2 As Bitmap
Bitmap1 = getpage(PageIndex, dpi, FileSrc)
Bitmap2 = getpage(PageIndex - 1, dpi, FileSrc)
Bitmap = compositing(Bitmap1, Bitmap2)
End Ifهنا تم عملية فحص رقم الصفحة التي نود عرضها وتم تقسيمها لمعرفة هل هي رقم زوجي ام فردي بحيث لو كانت رقم زوجي وهو رقم 2 اي صوف ست دمجها مع الصفحة رقم 3 ولو كانت الرقم 3 سوف يتم دمجها مع الصفحة السابقة لها وهي رقم 2.
Dim Bitmap1 As Bitmap
Dim Bitmap2 As Bitmap
Bitmap1 = getpage(PageIndex + 1, dpi, FileSrc)
Bitmap2 = getpage(PageIndex, dpi, FileSrc)
Bitmap = compositing(Bitmap1, Bitmap2)كما تلاحظت تم تعريف متغيرين bitmap1 و bitmap2 حيث سوف يتم تخزين بداخلها كل صفحة لحده للصفحة المشار لها وللصفحة التي سوف نقوم بدمجها مع بعض ، وكما تلاحظون تم استخدام الدالة getpage لاحضار الصورة من ملف PDF والتي قمنا بشرحها في الدرس الأول.
Bitmap = compositing(Bitmap1, Bitmap2)
هنا تلاحظن بأنه تم استدعاء الدالة compositing وتم تمرير لها القيمتين bitmap1 و bitmap2 والتي سوف بداخلها الصفحتين التي سوف نقوم بدمجهم مع بعضهم البعض، وكود الدالة compositing هو التالي:
Public Shared Function compositing(ByVal bitmap1 As Bitmap, ByVal bitmap2 As Bitmap) As Bitmap
Dim compositeImage As Bitmap = New Bitmap(bitmap1.Width + bitmap2.Width, bitmap1.Height)
Dim compositeGraphics As Graphics = Drawing.Graphics.FromImage(compositeImage)
compositeGraphics.CompositingMode = CompositingMode.SourceCopy
compositeGraphics.DrawImageUnscaled(bitmap1, 0, 0)
compositeGraphics.DrawImageUnscaled(bitmap2, bitmap1.Width, 0)
Return compositeImage
End Functionفي الكود التالي
Dim compositeImage As Bitmap = New Bitmap(bitmap1.Width + bitmap2.Width, bitmap1.Height)
تم تعريف متغير compositeImage من نوع bitmap وتم تحديد عرضه بمقايس عرض الصورتين المتخزنة بداخله bitmap1 و bitmap2 التي تم تمريرهم مسبقا للدالة compositing وتم تحديد الارتفاع لها فقط من قيمة واحده من القيم المرره ، كما تعلمون بأنه ارتفاع الصفحة لا تتغير مطلقا عند قرائة اي صحيفة او كتاب وإنما فقط العرض هو الذي يتغير فلذلك لم يتم حساب مجموع الارتفاع للصورتين مع بعضهما البعض.
Dim compositeGraphics As Graphics = Drawing.Graphics.FromImage(compositeImage)
هنا تم تعريف متغير compositeGraphics من نوع Graphics حيث سوف يتم من خلاله عمل الدمج للصورتين.
compositeGraphics.CompositingMode = CompositingMode.SourceCopy
هنا تم وضع CompositingMode القيمة SourceCopy بأن سوف نقوم بعملية نسخ.
compositeGraphics.DrawImageUnscaled(bitmap1, 0, 0)
هنا تم استخدام الأمر DrawImageUnscaled ليقوم برسم الصورة الأولى
compositeGraphics.DrawImageUnscaled(bitmap2, bitmap1.Width, 0)
هنا تم استدعاء نفس الأمر وتم طلب إدراج الصورة الثانيه مع تحديد قيمة العرض للصفحة التي سوف يتم إدراجه بها.
فسوف تحصلون على الشكل التالي:

وبهكذا نكون قد انتهينا من شرح دمج الصفحات مع بعضها العض وسوف تجدون اكواد هذا المثال ضمن المرفق للمشاركة الأولى .
مع التحية
حررت من قبل:
عبدالله جابر شقليه في
السبت,10/شعبان/1430 هـ,02:30 صباحاً