Typowe przypadki użycia Aspose.PDF FOSS for Go

Typowe przypadki użycia Aspose.PDF FOSS for Go

Aspose.PDF FOSS for Go jest czysto-Go modułem do zarządzania dokumentami PDF. Ten artykuł opisuje najczęściej potrzebne operacje przy użyciu typów Document, Form, EncryptionOptions, Table i OutlineItemCollection.

go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go

Przewodnik krok po kroku

Krok 1: Zainstaluj pakiet

Dodaj zależność modułu Go:

go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go

Krok 2: Importuj pakiet

Użyj aliasu, aby zachować zwięzłość odwołań do importu:

import (
    "fmt"
    pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)

Krok 3: Podziel PDF na pliki po jednej stronie

Document.Split dzieli dokument wielostronicowy na jeden *Document na stronę.

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))

Krok 4: Połącz wiele plików PDF w jeden

Document.Append łączy strony z drugiego dokumentu w miejscu przed zapisaniem.

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")

Krok 5: Zastosuj szyfrowanie hasłem

EncryptionOptions konfiguruje hasło użytkownika, hasło właściciela, algorytm i Permissions per operację w jednym wywołaniu:

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")

Aby uzyskać kopię w postaci zwykłego tekstu z zaszyfrowanego pliku:

doc, _ := pdf.OpenWithPassword("contract_protected.pdf", "clientpass")
doc.RemoveEncryption()
doc.Save("contract_decrypted.pdf")

Krok 6: Wypełnij AcroForm

Iteruj lub wybieraj pola po nazwie. Załóż konkretny typ (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")

Krok 7: Zbuduj układ tabeli

Dodaj Table z Row i Cell wpisami na stronę do generowania faktury lub raportu:

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")

Krok 8: Dodaj drzewo zakładek

OutlineItemCollection tworzy zakładki z zagnieżdżeniem rozdział/sekcja oraz DestinationXYZ docelowe strony:

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")

Typowe problemy i rozwiązania

pdf.Open zwraca błąd dla prawidłowych plików PDF Sprawdź, czy ścieżka do pliku jest prawidłowa i czy plik nie jest otwarty w innym procesie. W systemie Windows blokada pliku może uniemożliwić odczyt.

Panika przy asercji typu podczas dostępu do pól formularza Użyj pdf.FieldType(f) lub przełącznik typu, aby sprawdzić typ pola przed asercją. A *pdf.TextBoxField asercja na CheckboxField spowoduje panikę.

go get zwraca błąd “module not found” Ensure GOPROXY jest ustawiony na dostępny serwer proxy (np. GOPROXY=direct) oraz że twoja sieć może osiągnąć github.com. W środowiskach odłączonych od sieci, użyj GONOSUMCHECK lub lokalnego mirrora modułów.

SaveTo zawodzi po OpenWithPassword Jeśli wywołasz Save after OpenWithPassword bez wywołania RemoveEncryption, wyjście jest ponownie szyfrowane pierwotnym hasłem. To jest oczekiwane zachowanie — wywołaj RemoveEncryption jawnie, aby wygenerować kopię w formacie tekstowym.

Liczba stron połączonego dokumentu jest nieprawidłowa Append modyfikuje odbiorcę w miejscu. Upewnij się, że nie wywołujesz Append na dokumencie, który został już zapisany; otwórz ponownie dokument bazowy, jeśli musisz wygenerować wiele połączonych wyników.


Najczęściej zadawane pytania

Czy mogę przetwarzać pliki PDF bez zapisywania ich na dysku?

Document.WriteTo przyjmuje io.Writer, dzięki czemu możesz zapisywać do bufora, strumienia sieciowego lub obiektu response writer bez tworzenia pliku tymczasowego.

Czy bezpieczne jest jednoczesne używanie Aspose.PDF FOSS dla Go?

Każda instancja *Document nie jest bezpieczna dla goroutine. Używaj jednego Document na goroutine lub zabezpiecz współdzielone instancje przy użyciu mutexa.

Jak odczytać wartości pól z wypełnionego formularza?

Użyj Field.Value() na dowolnym polu lub wykonaj type-assert, aby uzyskać dostęp do specyficznych dla typu accessorów, takich jak CheckboxField.Checked() lub ComboBoxField.SelectedIndex().

Czy mogę utworzyć PDF od podstaw bez istniejącego szablonu?

Tak. pdf.NewDocument() tworzy pusty dokument. Wywołaj AddBlankPageFromFormat(pdf.PageFormatA4), aby dodać pustą stronę, a następnie dodaj treść (tabele, adnotacje itp.) przed zapisaniem.

Jaka jest różnica między Document.Save a Document.WriteTo?

Save(path string) zapisuje do ścieżki pliku. WriteTo(w io.Writer) zapisuje do dowolnego io.Writer — przydatne dla odpowiedzi HTTP, buforów lub potoków strumieniowych.


Zobacz także

 Polski