موارد استفاده رایج برای Aspose.PDF FOSS for Go
Aspose.PDF FOSS for Go یک ماژول کاملاً Go برای مدیریت اسناد PDF است. این مقاله به رایجترین عملیات مورد نیاز میپردازد که با انواع Document، Form، EncryptionOptions، Table و OutlineItemCollection انجام میشوند.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goراهنمای گامبهگام
مرحله ۱: نصب بسته
افزودن وابستگی ماژول Go:
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goمرحله ۲: وارد کردن بسته
از یک نام مستعار استفاده کنید تا مراجع واردات مختصر بمانند:
import (
"fmt"
pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)مرحله ۳: تقسیم یک PDF به فایلهای صفحه به صفحه
Document.Split یک سند چند صفحهای را به یک *Document برای هر صفحه تقسیم میکند.
doc, err := pdf.Open("report.pdf")
if err != nil {
panic(err)
}
pages, _ := doc.Split()
for i, p := range pages {
p.Save(fmt.Sprintf("report_page_%03d.pdf", i+1))
}
fmt.Printf("Split %d pages\n", len(pages))مرحله ۴: ادغام چندین PDF در یک فایل
Document.Append صفحات را از سند دوم به صورت در-جا (in-place) قبل از ذخیرهسازی ادغام میکند.
base, _ := pdf.Open("intro.pdf")
chapter1, _ := pdf.Open("chapter1.pdf")
chapter2, _ := pdf.Open("chapter2.pdf")
appendix, _ := pdf.Open("appendix.pdf")
base.Append(chapter1)
base.Append(chapter2)
base.Append(appendix)
base.Save("full_document.pdf")مرحله ۵: اعمال رمزگذاری با کلمه عبور
EncryptionOptions کلمه عبور کاربر، کلمه عبور مالک، الگوریتم و Permissions برای هر عملیات را در یک فراخوانی واحد پیکربندی میکند:
doc, _ := pdf.Open("contract.pdf")
doc.SetEncryption(pdf.EncryptionOptions{
UserPassword: "clientpass",
OwnerPassword: "adminpass",
Permissions: &pdf.Permissions{AllowPrint: true, AllowCopy: false},
})
doc.Save("contract_protected.pdf")برای تولید یک نسخه متن ساده از یک فایل رمزگذاریشده:
doc, _ := pdf.OpenWithPassword("contract_protected.pdf", "clientpass")
doc.RemoveEncryption()
doc.Save("contract_decrypted.pdf")مرحله 6: یک AcroForm را پر کنید
بر حسب نام، فیلدها را تکرار یا هدفگذاری کنید. نوع دقیق را تأیید کنید (TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField).
doc, _ := pdf.Open("application_form.pdf")
name := doc.Form().Field("applicant_name").(*pdf.TextBoxField)
name.SetValue("Jane Doe")
agree := doc.Form().Field("terms_accepted").(*pdf.CheckboxField)
agree.SetChecked(true)
country := doc.Form().Field("country").(*pdf.ComboBoxField)
country.SetSelected(0)
doc.Save("application_filled.pdf")مرحله 7: ساخت یک طرح جدول
یک Table با ورودیهای Row و Cell به صفحهای برای تولید فاکتور یا گزارش اضافه کنید:
doc, _ := pdf.Open("invoice_template.pdf")
page, _ := doc.Page(1)
tbl := pdf.NewTable()
tbl.SetColumnWidths([]float64{200, 80, 100})
header := tbl.AddRow()
header.AddCell("Description")
header.AddCell("Qty")
header.AddCell("Amount")
row := tbl.AddRow()
row.AddCell("PDF Processing Service")
row.AddCell("1")
row.AddCell("$500.00")
page.AddTable(tbl, pdf.Rectangle{LLX: 72, LLY: 100, URX: 540, URY: 700})
doc.Save("invoice.pdf")مرحله 8: افزودن یک درخت نشانک
OutlineItemCollection نشانکها را با تو در تو شدن فصل/بخش و هدفهای صفحه DestinationXYZ ایجاد میکند:
doc, _ := pdf.Open("manual.pdf")
page1, _ := doc.Page(1)
page2, _ := doc.Page(2)
ch1 := pdf.NewOutlineItemCollection(doc)
ch1.SetTitle("Introduction")
ch1.SetBold(true)
ch1.SetDestination(pdf.NewDestinationXYZ(page1, 0, 792, 1.0))
doc.Outlines().Add(ch1)
ch2 := pdf.NewOutlineItemCollection(doc)
ch2.SetTitle("Configuration")
ch2.SetDestination(pdf.NewDestinationFit(page2))
doc.Outlines().Add(ch2)
doc.Save("manual_bookmarked.pdf")مشکلات رایج و راهحلها
pdf.Open برای فایلهای PDF معتبر خطایی برمیگرداند اطمینان حاصل کنید که مسیر فایل صحیح است و فایل در فرآیند دیگری باز نیست. در Windows، قفلگذاری فایل میتواند خواندن را جلوگیری کند.
Type assertion panic هنگام دسترسی به فیلدهای فرم استفاده کنید pdf.FieldType(f) یا یک type switch برای بررسی نوع فیلد قبل از ادعا. یک *pdf.TextBoxField assertion بر یک CheckboxField panic خواهد شد.
go get با خطای “module not found” شکست میخورد Ensure GOPROXY به یک پراکسی قابل دسترسی تنظیم شده است (مثلاً. GOPROXY=direct) و اینکه شبکه شما میتواند به github.com. در محیطهای ایزوله، از GONOSUMCHECK یا یک آینه محلی ماژول.
SaveTo پس از شکست میخورد OpenWithPassword اگر فراخوانی کنید Save after OpenWithPassword بدون فراخوانی RemoveEncryption, خروجی با رمز عبور اصلی دوباره رمزنگاری میشود. این رفتار مورد انتظار است — فراخوانی RemoveEncryption بهصورت صریح برای تولید یک نسخهٔ متنی ساده.
تعداد صفحات سند ترکیبشده اشتباه است Append دریافتکننده را بهصورت درجا تغییر میدهد. اطمینان حاصل کنید که در حال فراخوانی نیستید Append روی سندی که قبلاً ذخیره شده است؛ اگر نیاز به ساخت خروجیهای ترکیبی متعدد دارید، سند پایه را دوباره باز کنید.
سوالات متداول
آیا میتوانم PDFها را بدون نوشتن بر روی دیسک پردازش کنم؟
Document.WriteTo یک io.Writer میپذیرد، بنابراین میتوانید به یک بافر، جریان شبکه یا نویسندهٔ پاسخ بنویسید بدون اینکه فایل موقت ایجاد کنید.
آیا استفاده همزمان از Aspose.PDF FOSS برای Go ایمن است؟
هر نمونهٔ *Document ایمن برای گوروتین نیست. برای هر گوروتین یک Document استفاده کنید یا نمونههای مشترک را با یک mutex محافظت کنید.
چگونه میتوانم مقادیر فیلدها را از یک فرم پرشده بخوانم؟
از Field.Value() بر روی هر فیلدی استفاده کنید یا با type-assert به accessorهای خاص نوع مانند CheckboxField.Checked() یا ComboBoxField.SelectedIndex() دسترسی پیدا کنید.
آیا میتوانم یک PDF را از صفر بدون قالب موجود ایجاد کنم؟
بله. pdf.NewDocument() یک سند خالی ایجاد میکند. برای افزودن یک صفحهٔ خالی، AddBlankPageFromFormat(pdf.PageFormatA4) را فراخوانی کنید، سپس قبل از ذخیرهسازی محتوا (جداول، حاشیهنویسیها و غیره) را اضافه کنید.
تفاوت بین Document.Save و Document.WriteTo چیست؟
Save(path string) به مسیر فایل مینویسد. WriteTo(w io.Writer) به هر io.Writer مینویسد — برای پاسخهای HTTP، بافرها یا خطوط لولهٔ جریان مفید است.