Casi d'uso comuni per Aspose.PDF FOSS for Go
Aspose.PDF FOSS for Go è un modulo pure-Go per la gestione di documenti PDF. Questo articolo copre le operazioni più frequentemente necessarie usando i tipi Document, Form, EncryptionOptions, Table e OutlineItemCollection.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goGuida passo-passo
Passo 1: Installa il pacchetto
Aggiungi la dipendenza del modulo Go:
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goPasso 2: Importa il Pacchetto
Usa un alias per mantenere i riferimenti di importazione concisi:
import (
"fmt"
pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)Passo 3: Dividi un PDF in File Per Pagina
Document.Split divide un documento multi-pagina in un *Document per pagina.
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))Passo 4: Unisci più PDF in Uno
Document.Append unisce le pagine da un secondo documento in loco prima di salvare.
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")Passo 5: Applica la Crittografia con Password
EncryptionOptions configura la password utente, la password proprietaria, l’algoritmo e il Permissions per operazione in una singola chiamata:
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")Per produrre una copia in testo semplice da un file crittografato:
doc, _ := pdf.OpenWithPassword("contract_protected.pdf", "clientpass")
doc.RemoveEncryption()
doc.Save("contract_decrypted.pdf")Passo 6: Compila un AcroForm
Itera o indirizza i campi per nome. Verifica il tipo concreto (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")Passo 7: Costruisci un layout di tabella
Aggiungi un Table con Row e Cell voci a una pagina per la generazione di fatture o report:
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")Passo 8: Aggiungi un albero di segnalibri
OutlineItemCollection crea segnalibri con nidificazione capitolo/sezione e obiettivi di pagina 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")Problemi comuni e soluzioni
pdf.Open restituisce un errore per file PDF validi Verifica che il percorso del file sia corretto e che il file non sia aperto in un altro processo. Su Windows, il blocco dei file può impedire le letture.
Panico di assert di tipo durante l’accesso ai campi del modulo Usa pdf.FieldType(f) o uno switch di tipo per ispezionare il tipo di campo prima di fare l’assert. Un *pdf.TextBoxField assert su un CheckboxField causerà un panico.
go get fallisce con “module not found” Ensure GOPROXY è impostato su un proxy raggiungibile (ad es. GOPROXY=direct) e che la tua rete può raggiungere github.com. Nei ambienti isolati, usa GONOSUMCHECK o un mirror locale dei moduli.
SaveTo fallisce dopo OpenWithPassword Se chiami Save after OpenWithPassword senza chiamare RemoveEncryption, l’output viene ricifrato con la password originale. Questo è il comportamento previsto — chiama RemoveEncryption esplicitamente per produrre una copia in testo semplice.
Il conteggio delle pagine del documento unito è errato Append modifica il ricevente in loco. Assicurati di non chiamare Append su un documento che è già stato salvato; riapri il documento di base se devi generare più uscite unite.
Domande frequenti
Posso elaborare i PDF senza scrivere su disco?
Document.WriteTo accetta un io.Writer, così puoi scrivere su un buffer, stream di rete o response writer senza creare un file temporaneo.
È sicuro usare Aspose.PDF FOSS per Go in modo concorrente?
Ogni istanza di *Document non è sicura per le goroutine. Usa un Document per goroutine, oppure proteggi le istanze condivise con un mutex.
Come leggo i valori dei campi da un form compilato?
Usa Field.Value() su qualsiasi campo o esegui un type-assert per accedere a accessor specifici del tipo, come CheckboxField.Checked() o ComboBoxField.SelectedIndex().
Posso creare un PDF da zero senza un template esistente?
Sì. pdf.NewDocument() crea un documento vuoto. Chiama AddBlankPageFromFormat(pdf.PageFormatA4) per aggiungere una pagina vuota, poi aggiungi contenuto (tabelle, annotazioni, ecc.) prima di salvare.
Qual è la differenza tra Document.Save e Document.WriteTo?
Save(path string) scrive su un percorso file. WriteTo(w io.Writer) scrive su qualsiasi io.Writer — utile per risposte HTTP, buffer o pipeline di flusso.