Introduction

در این پست، شما یاد خواهید گرفت که چگونه برای انجام عملیات مدیریت اسناد PDF هسته ای در Go با استفاده از Aspose.PDF FOSS: باز کردن و ذخیره اسنادی، ایجاد اسنت های جدید، تقسیم یک سند به فایل های صفحه، ترکیب چندین استای پی دی، استخراج ردیف صفحات، و خواندن یا نوشتن اسمت داده ها.

کتابخانه یک ماژول برای 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, PageRangeDocumentInfo نوعی که شکل می گیرد سطح مدیریت اسناد اصلی.


عملیات هسته ای

باز کردن و ذخیره اسناد

pdf.Open PDF را از دیسک دانلود کنید و یک فایل را به *Document. OpenWithPassword می کند همانند فایل های محافظت شده با رمز عبور. Document.Save نتیجه را به یک مسیر فایل. 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, CreationDateModDate.محل ها را به طور مستقیم تغییر دهید، سپس تماس بگیرید 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) بازگشت به A *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

یک مثال کامل که یک سند را باز می کند، صفحات 1 تا 3 را استخراج می کنند و نتیجه را با متا داده های به روز شده ذخیره می شود:

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-for-go.


شروع می شود

منابع مرتبط