العمل مع الأفعال في ملف PDF

يعمل الشفرة التالية أيضًا مع مكتبة Aspose.PDF.Drawing.

إضافة رابط تشعبي في ملف PDF

من الممكن إضافة روابط تشعبية إلى ملفات PDF، إما للسماح للقراء بالانتقال إلى جزء آخر من الـ PDF، أو إلى محتوى خارجي.

لإضافة روابط ويب تشعبية إلى مستندات PDF:

  1. إنشاء كائن الفصل Document.

  2. الحصول على فصل Page الذي تريد إضافة الرابط إليه.

  3. إنشاء كائن LinkAnnotation باستخدام الفصل Page وكائنات Rectangle. يُستخدم كائن المستطيل لتحديد الموقع على الصفحة الذي يجب إضافة الرابط فيه.

  4. تعيين خاصية الفعل إلى كائن GoToURIAction الذي يحدد موقع الـ URI البعيد.

  5. لإضافة نص حر:

    • قم بإنشاء كائن FreeTextAnnotation. يقبل أيضًا كائنات الصفحة والمستطيل كوسيطات، لذا من الممكن تقديم نفس القيم المحددة لبناء جملة مُنشئ LinkAnnotation.
    • باستخدام خاصية Contents لكائن FreeTextAnnotation، حدد النص الذي يجب أن يظهر في ملف PDF الناتج.
    • اختياريًا، قم بضبط عرض الحد لكل من كائنات LinkAnnotation وFreeTextAnnotation إلى 0 بحيث لا يظهران في مستند PDF.
    • بمجرد تعريف كائنات LinkAnnotation و FreeTextAnnotation، أضف هذه الروابط إلى مجموعة Annotations لكائن Page.
  • بمجرد تعريف كائنات LinkAnnotation و FreeTextAnnotation، قم بإضافة هذه الروابط إلى مجموعة التعليقات التوضيحية لكائن Page.
  • أخيرًا، احفظ ملف PDF المُحدث باستخدام طريقة Save الخاصة بكائن Document.

يوضح مقتطف الكود التالي كيفية إضافة ارتباط تشعبي إلى ملف PDF.

// للأمثلة الكاملة وملفات البيانات، يرجى زيارة https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// المسار إلى دليل الوثائق.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();

// فتح المستند
Document document = new Document(dataDir + "AddHyperlink.pdf");
// إنشاء رابط
Page page = document.Pages[1];
// إنشاء كائن تعليق توضيحي للرابط
LinkAnnotation link = new LinkAnnotation(page, new Aspose.Pdf.Rectangle(100, 100, 300, 300));
// إنشاء كائن حدود لتعليق LinkAnnotation
Border border = new Border(link);
// تحديد قيمة عرض الحدود كـ 0
border.Width = 0;
// تعيين الحدود لتعليق LinkAnnotation
link.Border = border;
// تحديد نوع الرابط كعنوان URI بعيد
link.Action = new GoToURIAction("www.aspose.com");
// إضافة تعليق توضيحي للرابط إلى مجموعة التعليقات التوضيحية للصفحة الأولى من ملف PDF
page.Annotations.Add(link);

// إنشاء تعليق توضيحي للنص الحر
FreeTextAnnotation textAnnotation = new FreeTextAnnotation(document.Pages[1], new Aspose.Pdf.Rectangle(100, 100, 300, 300), new DefaultAppearance(Aspose.Pdf.Text.FontRepository.FindFont("TimesNewRoman"), 10, System.Drawing.Color.Blue));
// النص المراد إضافته كنص حر
textAnnotation.Contents = "Link to Aspose website";
// تعيين الحدود لتعليق النص الحر
textAnnotation.Border = border;
// إضافة تعليق النص الحر إلى مجموعة التعليقات التوضيحية للصفحة الأولى من المستند
document.Pages[1].Annotations.Add(textAnnotation);
dataDir = dataDir + "AddHyperlink_out.pdf";
// حفظ المستند المُحدث
document.Save(dataDir);

إنشاء رابط تشعبي للصفحات في نفس ملف PDF

Aspose.PDF لـ .NET يوفر ميزة رائعة لإنشاء ملفات PDF بالإضافة إلى تعديلها. كما يقدم الميزة لإضافة روابط إلى صفحات PDF ويمكن أن يوجه الرابط إلى صفحات في ملف PDF آخر، عنوان URL للويب، رابط لتشغيل تطبيق أو حتى رابط للصفحات في نفس ملف PDF. من أجل إضافة الروابط المحلية (روابط للصفحات في نفس ملف PDF)، تم إضافة فئة تسمى LocalHyperlink إلى فضاء الاسم Aspose.PDF ولهذه الفئة خاصية تسمى TargetPageNumber، والتي يتم استخدامها لتحديد صفحة الهدف/الوجهة للرابط التشعبي.

من أجل إضافة الرابط المحلي، نحتاج إلى إنشاء TextFragment بحيث يمكن ربط الرابط بـ TextFragment. تحتوي فئة TextFragment على خاصية تسمى Hyperlink والتي تستخدم لربط مثيل LocalHyperlink. يوضح الشفرة التالية الخطوات لتحقيق هذا الشرط.

// إنشاء مستند PDF جديد
Document pdfDocument = new Document();

// إضافة صفحة إلى مستند PDF
Page page1 = pdfDocument.Pages.Add();
Page page2 = pdfDocument.Pages.Add();

// إنشاء TextFragment
TextFragment textFragment = new TextFragment("انتقل إلى الصفحة الثانية");
textFragment.Position = new Position(100, 600);

// إنشاء LocalHyperlink
LocalHyperlink localHyperlink = new LocalHyperlink();
localHyperlink.TargetPageNumber = 2;

// ربط الرابط المحلي بـ TextFragment
textFragment.Hyperlink = localHyperlink;

// إضافة TextFragment إلى الصفحة الأولى
page1.Paragraphs.Add(textFragment);

// حفظ المستند
pdfDocument.Save("output.pdf");
// للحصول على أمثلة كاملة وملفات البيانات، يرجى زيارة https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// المسار إلى دليل المستندات.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();

// إنشاء نموذج للمستند
Document doc = new Document();
// إضافة صفحة إلى مجموعة صفحات ملف PDF
Page page = doc.Pages.Add();
// إنشاء نموذج لجزء نصي
Aspose.Pdf.Text.TextFragment text = new Aspose.Pdf.Text.TextFragment("اختبار رقم الصفحة الرابط إلى الصفحة 7");
// إنشاء نموذج لرابط محلي
Aspose.Pdf.LocalHyperlink link = new Aspose.Pdf.LocalHyperlink();
// تحديد الصفحة المستهدفة لنموذج الرابط
link.TargetPageNumber = 7;
// تعيين الرابط الخاص بجزء النص
text.Hyperlink = link;
// إضافة النص إلى مجموعة فقرات الصفحة
page.Paragraphs.Add(text);
// إنشاء نموذج جديد لجزء نصي
text = new TextFragment("اختبار رقم الصفحة الرابط إلى الصفحة 1");
// يجب إضافة جزء النص على صفحة جديدة
text.IsInNewPage = true;
// إنشاء نموذج آخر لرابط محلي
link = new LocalHyperlink();
// تحديد الصفحة المستهدفة للرابط الثاني
link.TargetPageNumber = 1;
// تعيين الرابط لجزء النص الثاني
text.Hyperlink = link;
// إضافة النص إلى مجموعة فقرات الصفحة
page.Paragraphs.Add(text);

dataDir = dataDir + "CreateLocalHyperlink_out.pdf";
// حفظ المستند بعد التحديث
doc.Save(dataDir);

الحصول على وجهة الرابط التشعبي (URL) في ملف PDF

الروابط ممثلة كتعليقات في ملف PDF ويمكن إضافتها أو تحديثها أو حذفها. يدعم Aspose.PDF لـ .NET أيضًا الحصول على وجهة (URL) الرابط التشعبي في ملف PDF.

للحصول على URL للرابط:

  1. إنشاء كائن Document.
  2. الحصول على Page الذي تريد استخراج الروابط منه.
  3. استخدم فئة AnnotationSelector لاستخراج كل كائنات LinkAnnotation من الصفحة المحددة.
  4. قم بتمرير كائن AnnotationSelector إلى طريقة Accept الخاصة بكائن Page.
  5. أخيرًا، استخرج إجراء LinkAnnotation كـ GoToURIAction.

الشفرة التالية توضح كيفية الحصول على وجهات الروابط الفائقة (URL) من ملف PDF.

// لأمثلة كاملة وملفات بيانات، يرجى زيارة https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// مسار إلى مجلد الوثائق.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();
// تحميل ملف PDF
Document document = new Document(dataDir + "input.pdf");

// تصفح جميع صفحات PDF
foreach (Aspose.Pdf.Page page in document.Pages)
{
    // الحصول على تعليقات الروابط من صفحة معينة
    AnnotationSelector selector = new AnnotationSelector(new Aspose.Pdf.Annotations.LinkAnnotation(page, Aspose.Pdf.Rectangle.Trivial));

    page.Accept(selector);
    // إنشاء قائمة تحتوي على جميع الروابط
    IList<Annotation> list = selector.Selected;
    // تكرار كل عنصر داخل القائمة
    foreach (LinkAnnotation a in list)
    {
        // طباعة عنوان URL الوجهة
        Console.WriteLine("\nDestination: " + (a.Action as Aspose.Pdf.Annotations.GoToURIAction).URI + "\n");
    }
}

الحصول على نص الرابط التشعبي

الرابط التشعبي يتكون من جزأين: النص الذي يظهر في المستند، وعنوان URL الوجهة. في بعض الحالات، النص هو ما نحتاجه بدلاً من العنوان.

النص والتعليقات/الأفعال في ملف PDF يتم تمثيلها بكيانات مختلفة. النص على صفحة هو مجرد مجموعة من الكلمات والأحرف، بينما تجلب التعليقات بعض التفاعلية مثل التي تكون متأصلة في الرابط التشعبي.

لإيجاد محتوى العنوان، تحتاج للعمل مع التعليق والنص. كائن Annotation لا يحتوي بحد ذاته على النص ولكن يقع تحت النص في الصفحة. لذا للحصول على النص، يعطي Annotation حدود العنوان، بينما يعطي كائن النص محتويات العنوان. يرجى مشاهدة الشفرة التالية.

  {
        public static void Run()
        {
            try
            {
                // ExStart:GetHyperlinkText
                // المسار إلى دليل المستندات.
                string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();
                // تحميل ملف PDF
                Document document = new Document(dataDir + "input.pdf");
                // تكرار كل صفحة من PDF
                foreach (Page page in document.Pages)
                {
                    // عرض التعليق التوضيحي للرابط
                    ShowLinkAnnotations(page);
                }
                // ExEnd:GetHyperlinkText
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        // ExStart:ShowLinkAnnotations
        public static void ShowLinkAnnotations(Page page)
        {
            foreach (Aspose.Pdf.Annotations.Annotation annot in page.Annotations)
            {
                if (annot is LinkAnnotation)
                {
                    // طباعة عنوان URL لكل تعليق توضيحي للرابط
                    Console.WriteLine("URI: " + ((annot as LinkAnnotation).Action as GoToURIAction).URI);
                    TextAbsorber absorber = new TextAbsorber();
                    absorber.TextSearchOptions.LimitToPageBounds = true;
                    absorber.TextSearchOptions.Rectangle = annot.Rect;
                    page.Accept(absorber);
                    string extractedText = absorber.Text;
                    // طباعة النص المرتبط بالرابط التشعبي
                    Console.WriteLine(extractedText);
                }

            }
        }
        // ExEnd:ShowLinkAnnotations
    }
}

إزالة إجراء فتح المستند من ملف PDF

كيفية تحديد صفحة PDF عند عرض المستند شرح كيفية توجيه المستند ليفتح على صفحة مختلفة عن الأولى. عند دمج عدة مستندات، وواحدة أو أكثر بها إجراء GoTo، ربما ترغب في إزالتها. على سبيل المثال، إذا كنت تدمج مستندين والثاني به إجراء GoTo يأخذك إلى الصفحة الثانية، سيفتح المستند الناتج على الصفحة الثانية من الوثيقة الثانية بدلاً من الصفحة الأولى من المستند المدمج. لتجنب هذا السلوك، قم بإزالة أمر إجراء الفتح.

لإزالة إجراء فتح:

  1. قم بتعيين خاصية OpenAction لكائن Document على null.
  2. احفظ PDF المحدث باستخدام طريقة Save لكائن Document.

يوضح الكود التالي كيفية إزالة إجراء فتح المستند من ملف PDF. يوضح الشيفرة التالية كيفية إزالة إجراء فتح المستند من ملف PDF.

// للأمثلة الكاملة وملفات البيانات، يرجى زيارة https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// مسار دليل المستندات.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();
// فتح المستند
Document document = new Document(dataDir + "RemoveOpenAction.pdf");
// إزالة إجراء فتح المستند
document.OpenAction = null;
dataDir = dataDir + "RemoveOpenAction_out.pdf";
// حفظ المستند المحدث
document.Save(dataDir);

كيفية تحديد صفحة PDF عند عرض المستند

عند عرض ملفات PDF في مشاهد PDF مثل Adobe Reader، عادةً ما تفتح الملفات في الصفحة الأولى. ومع ذلك، من الممكن تعيين الملف ليفتح على صفحة مختلفة.

تسمح لك الفئة XYZExplicitDestination بتحديد صفحة في ملف PDF تريد فتحها. فئة XYZExplicitDestination تسمح لك بتحديد صفحة في ملف PDF التي تريد فتحها.

// للحصول على أمثلة كاملة وملفات بيانات، يرجى الذهاب إلى https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// المسار إلى دليل المستندات.
string dataDir = RunExamples.GetDataDir_AsposePdf_LinksActions();

// تحميل ملف PDF
Document doc = new Document(dataDir + "SpecifyPageWhenViewing.pdf");
// الحصول على نموذج الصفحة الثانية من المستند
Page page2 = doc.Pages[2];
// إنشاء المتغير لضبط عامل التكبير للصفحة المستهدفة
double zoom = 1;
// إنشاء نموذج GoToAction
GoToAction action = new GoToAction(doc.Pages[2]);
// الذهاب إلى الصفحة 2
action.Destination = new XYZExplicitDestination(page2, 0, page2.Rect.Height, zoom);
// تعيين فتح الوثيقة بالفعل
doc.OpenAction = action;
// حفظ الوثيقة بعد التحديث
doc.Save(dataDir + "goto2page_out.pdf");