سوالات متداول
مجوزها و منبع باز
مجوز Aspose.PDF FOSS برای Go چیست؟
Aspose.PDF FOSS برای Go تحت مجوز MIT License. متن کامل مجوز در مخزن قرار دارد در github.com/aspose-pdf-foss/aspose-pdf-foss-for-go. نیازی به ثبتنام، فایل فعالسازی یا کلید زمان اجرا نیست.
آیا میتوانم Aspose.PDF FOSS برای Go را در یک محصول تجاری استفاده کنم؟
بله. مجوز MIT اجازه استفاده تجاری بدون محدودیت، تغییر، توزیع و استفاده خصوصی را میدهد. شما باید اعلان حق کپیرایت و متن مجوز MIT را در تمام نسخهها یا بخشهای قابل توجه نرمافزار گنجانده باشید.
آیا نسخهٔ سازمانی وجود دارد؟
Aspose.PDF FOSS نسخه منبع باز با مجوز MIT است. یک محصول تجاری جداگانه Aspose.PDF بهعنوان Aspose.PDF — Enterprise Product Family با پشتیبانی سازمانی، پوشش گسترده فرمتها، و یکپارچهسازی ابری.
نصب و الزامات
چگونه Aspose.PDF FOSS را برای Go نصب کنم؟
ماژول را به پروژه Go خود اضافه کنید:
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goدر فایلهای منبع خود آن را با یک نام مستعار وارد کنید:
import pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"کدام نسخه Go مورد نیاز است؟
نسخه Go 1.24 یا بالاتر مورد نیاز است. نسخه خود را با go version بررسی کنید.
آیا وابستگیهای کتابخانه بومی یا سیستمی وجود دارد؟
شماره Aspose.PDF FOSS برای Go یک پیادهسازی کاملاً Go است که هیچ وابستگی C، C++ یا CGo ندارد. این نیاز به هیچ کتابخانه سیستمی، نمایشگر PDF یا ابزارهای خارجی ندارد.
API Usage
چگونه یک PDF موجود را باز کنم؟
از pdf.Open برای PDFهای استاندارد و pdf.OpenWithPassword برای فایلهای دارای رمز عبور استفاده کنید:
doc, err := pdf.Open("document.pdf")
if err != nil {
panic(err)
}
fmt.Println(doc.PageCount())چگونه یک PDF را به صفحات جداگانه تقسیم کنم؟
Document.Split یک []*Document برمیگرداند، به ازای هر صفحه یک مورد:
doc, _ := pdf.Open("report.pdf")
pages, _ := doc.Split()
for i, p := range pages {
p.Save(fmt.Sprintf("page_%03d.pdf", i+1))
}چگونه چندین PDF را ادغام کنم؟
Document.Append سند منبع را درجا ادغام میکند:
base, _ := pdf.Open("part1.pdf")
part2, _ := pdf.Open("part2.pdf")
base.Append(part2)
base.Save("combined.pdf")چگونه یک فیلد AcroForm را پر کنم؟
از Document.Form().Field(name) استفاده کنید و نوع مشخص را تأیید کنید:
doc, _ := pdf.Open("form.pdf")
text := doc.Form().Field("customer_name").(*pdf.TextBoxField)
text.SetValue("Jane Doe")
check := doc.Form().Field("agree").(*pdf.CheckboxField)
check.SetChecked(true)
doc.Save("form_filled.pdf")انواع فیلدهای پشتیبانی شده: TextBoxField، CheckboxField، RadioButtonField، ComboBoxField، ListBoxField، ButtonField.
چگونه نشانکها را اضافه کنم؟
یک OutlineItemCollection ایجاد کنید و یک Destination تنظیم کنید:
doc, _ := pdf.Open("manual.pdf")
page, _ := doc.Page(1)
bm := pdf.NewOutlineItemCollection(doc)
bm.SetTitle("Chapter 1")
bm.SetDestination(pdf.NewDestinationXYZ(page, 0, 800, 1.0))
doc.Outlines().Add(bm)
doc.Save("manual_with_bookmarks.pdf")امنیت و رمزنگاری
چگونه یک PDF را با رمز عبور محافظت کنم؟
از Document.SetEncryption همراه با یک ساختار EncryptionOptions برای اعمال حفاظت با رمز عبور و پرچمهای دسترسی استفاده کنید. یک رمز عبور کاربری برای باز کردن فایل و یک رمز عبور مالک برای حقهای ویرایش فراهم کنید:
doc, _ := pdf.Open("doc.pdf")
doc.SetEncryption(pdf.EncryptionOptions{
UserPassword: "userpass",
OwnerPassword: "ownerpass",
Permissions: &pdf.Permissions{AllowPrint: true, AllowCopy: false},
})
doc.Save("doc_protected.pdf")کدام الگوریتمهای رمزنگاری پشتیبانی میشوند؟
سه الگوریتم از طریق EncryptionOptions.Algorithm در دسترس هستند:
| Algorithm | Constant | Standard |
|---|---|---|
| AES-128 | EncryptionAlgAES128 (پیشفرض) | ISO 32000-1 |
| AES-256 | EncryptionAlgAES256 | ISO 32000-2 (خروجی PDF 2.0) |
| RC4-128 | EncryptionAlgRC4_128 | Legacy |
چگونه میتوان یک فایل محافظتشده با رمز عبور را باز کرد؟
از pdf.OpenWithPassword زمانی که فایل نیاز به احراز هویت دارد استفاده کنید. رمز عبور کاربر را بهعنوان آرگومان دوم بدهید؛ پس از موفقیت در رمزگشایی، یک *Document معمولی برمیگرداند:
doc, err := pdf.OpenWithPassword("protected.pdf", "userpass")
if err != nil {
panic(err)
}
fmt.Println(doc.PageCount())چگونه میتوان رمزنگاری را از یک PDF حذف کرد؟
پس از باز کردن فایل با رمز عبور صحیح، Document.RemoveEncryption را فراخوانی کنید. برای نوشتن یک کپی بدون رمزنگاری، نتیجه را ذخیره کنید:
doc, _ := pdf.OpenWithPassword("protected.pdf", "userpass")
doc.RemoveEncryption()
doc.Save("decrypted.pdf")رندرینگ و متن
چگونه میتوان یک صفحه PDF را به تصویر رندر کرد؟
از یکی از انواع دستگاهها استفاده کنید: BmpDevice، PngDevice، JpegDevice، TiffDevice یا GifDevice. دستگاه را با مقدار Resolution بسازید و متد Render* مربوطه را با io.Writer و RenderOptions فراخوانی کنید:
doc, _ := pdf.Open("report.pdf")
page, _ := doc.Page(1)
f, _ := os.Create("page1.png")
defer f.Close()
page.RenderPNG(f, pdf.RenderOptions{DPI: 150})چگونه میتوانم در یک PDF متن را جستجو کنم؟
با یک رشتهٔ پرسوجو و SearchOptions، Document.SearchText را فراخوانی کنید. نتیجه یک برش از مقادیر TextMatch است — هر کدام متن مطابقتیافته، اندیس صفحهٔ آن و جعبهٔ محدودهٔ خود را حمل میکنند.
doc, _ := pdf.Open("doc.pdf")
matches, _ := doc.SearchText("total", pdf.SearchOptions{CaseInsensitive: true})
for _, m := range matches {
fmt.Printf("page %d: %q\n", m.PageNumber, m.Text)
}چگونه فرم را مسطح کنم؟
پس از پر کردن یا مرور یک فرم، Document.Flatten را فراخوانی کنید. این متد تمام مقادیر فیلدها را در گرافیک صفحه ترکیب میکند و فیلدهای فرم تعاملی را حذف مینماید:
doc, _ := pdf.Open("filled.pdf")
doc.Flatten()
doc.Save("flat.pdf")محدودیتهای شناختهشده
آیا تمام ویژگیهای PDF پشتیبانی میشوند؟
این کتابخانه رایجترین عملیات مدیریت اسناد را پوشش میدهد: باز کردن، ایجاد، ذخیره، تقسیم، ادغام، استخراج صفحه، رمزنگاری، AcroForms، جداول، نشانکها، حاشیهنویسیها، رندر به تصویر، جستجوی متن و مسطحسازی فرم. ویژگیهای پیشرفتهای مانند امضای دیجیتال، محتوای 3D و تبدیل PDF/A ممکن است در نسخهٔ فعلی بهطور کامل پیادهسازی نشده باشند. برای وضعیت فعلی ویژگیها، README مخزن را بررسی کنید.
اگر از یک ادعای نوع فیلد استفاده کنم که مطابقت نداشته باشد، چه اتفاقی میافتد؟
یک ادعای نوع بر روی Field که با نوع واقعی فیلد مطابقت نداشته باشد، منجر به panic میشود. برای بررسی نوع قبل از ادعا، از pdf.FieldType(f) استفاده کنید، یا از یک سوئیچ نوع استفاده کنید:
doc, _ := pdf.Open("form.pdf")
for _, f := range doc.Form().Fields() {
switch v := f.(type) {
case *pdf.TextBoxField:
fmt.Println("text:", v.Value())
case *pdf.CheckboxField:
fmt.Println("checked:", v.Checked())
}
}