مقدمة
في هذه المقالة ، سوف تتعلم كيفية أداء العمليات الأساسية لإدارة مستندات PDF في Go باستخدام Aspose. PDF FOSS: فتح وتخزين الوثائق ، وإنشاء ملفات pdf جديدة ، تقسيم وثيقة إلى مكاتب لكل صفحة ، دمج مقاطع PDF متعددة ، استخراج نطاقات الصفحات ، وقراءة أو كتابة بيانات البيانات النقطية للمستند. جميع العملية متاحة دون أي اعتمادات C أو C ++ الأصلية.
المكتبة هي وحدة Go في github.com/aspose-pdf-foss/aspose-pdf-foss-for-go, ترخيص MIT، ويتطلب Go 1.24 أو أحدث. تثبيت مع go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.
هذا المقال يغطي: Document, Page, PageRange,، و DocumentInfo أنواع تشكل سطح إدارة المستندات الأساسية.
العمليات الأساسية
فتح وتخزين المستندات
pdf.Open يقوم بتحميل PDF من القرص ويعيد a *Document. OpenWithPassword يفعلها نفس الشيء بالنسبة للملفات المحمية بكلمة مرور. Document.Save يكتب النتيجة مرة أخرى إلى a مسار الملف. Document.WriteTo يكتب إلى io.Writer للذاكرة أو الشبكة سيناريوهات.
// Open a standard PDF
doc, err := pdf.Open("input.pdf")
if err != nil {
panic(err)
}
// Open an encrypted PDF
protected, err := pdf.OpenWithPassword("locked.pdf", "userpassword")
if err != nil {
panic(err)
}
// Save to a new path
err = doc.Save("output.pdf")
fmt.Println(protected.PageCount())
إنشاء وثيقة جديدة
pdf.NewDocument يخلق فراغًا. *Document.استخدمها . AddBlankPageFromFormat لإضافة صفحة فارغة بحجم ورق قياسي. PageFormat يوفر ثابتات شكل مسمّية (PageFormatA4, PageFormatLetter,، الخ).
doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
doc.Save("new_document.pdf")
تقسيم المستند
Document.Split يقوم بتقسيم PDF إلى صفحات فردية لكل صفحة *Document كل قيمة. يحتوي المستند المسترد على صفحة واحدة فقط ويمكن حفظها بشكل مستقل. مفيد لتمزيق التقارير التي يتم إنشاؤها على شرائح أو فصل صفحات الفاتورة.
doc, _ := pdf.Open("multi_page.pdf")
pages, err := doc.Split()
if err != nil {
panic(err)
}
for i, p := range pages {
filename := fmt.Sprintf("page_%03d.pdf", i+1)
if err := p.Save(filename); err != nil {
fmt.Printf("Failed to save page %d: %v\n", i+1, err)
}
}
fmt.Printf("Split into %d pages\n", len(pages))
دمج ملفات PDF متعددة
Document.Append يدمج ثانية *Document في المستقبل في المكان ، المرفق كل الصفحات من المصدر. Append مراراً وتكرارا لسلسلاً وثائق متعددة قبل واحد Save.الوثيقة المصدر لا يتم تعديلها.
base, _ := pdf.Open("report_intro.pdf")
section1, _ := pdf.Open("section1.pdf")
section2, _ := pdf.Open("section2.pdf")
appendix, _ := pdf.Open("appendix.pdf")
base.Append(section1)
base.Append(section2)
base.Append(appendix)
base.Save("complete_report.pdf")
استخراج مجموعة الصفحات
PageRange يمثل نطاق شامل (بناء على 1، باستخدام From/To المجال). تمرير نطاقات إلى Document.Extract لإنتاج جديد *Document تحتوي فقط على المنتجات المختارة هذه مفيدة لبناء الصادرات لكل فصل أو نسخ مُحَرَّرة التي تظهر في المقالة. تَخْلُص بعض الصفحاتِ.
doc, _ := pdf.Open("long_report.pdf")
// Extract pages 3 through 7
subset, err := doc.Extract(pdf.PageRange{From: 3, To: 7})
if err != nil {
panic(err)
}
subset.Save("pages_3_to_7.pdf")
قراءة وتدوين البيانات الوصفية للوثيقة
Document.Info يعيد a DocumentInfo التعريض الهيكلي حقول القاموس المعلوماتية: Title, Author, Subject, Keywords, Creator, Producer, CreationDate,، و ModDate. تغيير الحقول مباشرة، ثم الاتصال Document.SetInfo للكتابة الهيكل المحدث مرة أخرى قبل الاتصال Save.
doc, _ := pdf.Open("report.pdf")
info, _ := doc.Info()
// Read current values
fmt.Printf("Title: %s\nAuthor: %s\n", info.Title, info.Author)
// Update fields
info.Title = "Annual Report 2026"
info.Author = "Finance Team"
info.Keywords = "annual, report, finance, 2026"
doc.SetInfo(info)
doc.Save("report_updated.pdf")
الوصول إلى الصفحات الفردية
Document.Page(n) يستعيد *Page بالـ1 على أساس المؤشر. Document.PageCount العوائد عدد الصفحات الإجمالي. تعرض الصفات الجيمومرية لقراءة مربعات الصافحة و حجمها.
doc, _ := pdf.Open("document.pdf")
fmt.Printf("Page count: %d\n", doc.PageCount())
page, _ := doc.Page(1)
size, err := page.Size()
if err != nil {
panic(err)
}
fmt.Printf("Page 1 size: %.0f x %.0f pt\n", size.Width, size.Height)
بدء سريع
قم بتثبيت الوحدة مع: go get,، ثم تشغيل المثال الكامل أدناه. يفتح المثل وثيقة مصدر، يستخرج أول ثلاث صفحات في مستند جديد، يحدّث المستندات. DocumentInfo حقل الميتاداتا، ويحفظ النتيجة على القرص.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go
مثال كامل يفتح وثيقة، يستخرج الصفحات 13، ويحفظ النتيجة مع بيانات الميتاداتا المحدثة:
package main
import (
"fmt"
pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)
func main() {
// Open source document
src, err := pdf.Open("source.pdf")
if err != nil {
panic(err)
}
// Extract pages 1-3
subset, err := src.Extract(pdf.PageRange{From: 1, To: 3})
if err != nil {
panic(err)
}
// Update metadata
info, _ := subset.Info()
info.Title = "Pages 1-3 Extract"
info.Author = "Document Pipeline"
subset.SetInfo(info)
if err := subset.Save("extract_pages_1_3.pdf"); err != nil {
panic(err)
}
fmt.Printf("Saved %d pages\n", subset.PageCount())
}
المصدر المفتوح والتصنيف
Aspose.PDF FOSS for Go is released under the MIT license. There are no usage restrictions, لا توجد رسوم تشغيل ولا متطلبات تسجيل. يتوفر الكود المصدر على: github.com/aspose-pdf-foss/asspose - pdf-فوس فور جو.