Domande frequenti
Licenze e Open Source
Qual è la licenza per Aspose.PDF FOSS per Go?
Aspose.PDF FOSS per Go è rilasciato sotto la Licenza MIT. Il testo completo della licenza è incluso nel repository a github.com/aspose-pdf-foss/aspose-pdf-foss-for-go. Non è necessaria alcuna registrazione, file di attivazione o chiave di runtime.
Posso usare Aspose.PDF FOSS per Go in un prodotto commerciale?
Sì. La licenza MIT consente l’uso commerciale illimitato, la modifica, la distribuzione e l’uso privato. È necessario includere l’avviso di copyright e il testo della licenza MIT in tutte le copie o parti sostanziali del software.
Esiste una versione enterprise?
Aspose.PDF FOSS è l’edizione open-source, con licenza MIT. Un prodotto commerciale separato Aspose.PDF è disponibile come il Aspose.PDF — Enterprise Product Family con supporto enterprise, copertura estesa dei formati e integrazione cloud.
Installazione e requisiti
Come installo Aspose.PDF FOSS per Go?
Aggiungi il modulo al tuo progetto Go:
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goImportalo con un alias nei tuoi file sorgente:
import pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"Quale versione di Go è richiesta?
Go 1.24 o successiva è richiesta. Verifica la tua versione con go version.
Ci sono dipendenze native o di librerie di sistema?
No. Aspose.PDF FOSS per Go è un’implementazione pure-Go senza dipendenze da C, C++ o CGo. Non richiede alcuna libreria di sistema, visualizzatori PDF o strumenti esterni.
API Usage
Come apro un PDF esistente?
Usa pdf.Open per PDF standard e pdf.OpenWithPassword per file protetti da password:
doc, err := pdf.Open("document.pdf")
if err != nil {
panic(err)
}
fmt.Println(doc.PageCount())Come divido un PDF in pagine individuali?
Document.Split restituisce un []*Document, uno per pagina:
doc, _ := pdf.Open("report.pdf")
pages, _ := doc.Split()
for i, p := range pages {
p.Save(fmt.Sprintf("page_%03d.pdf", i+1))
}Come unisco più PDF?
Document.Append unisce un documento sorgente in loco:
base, _ := pdf.Open("part1.pdf")
part2, _ := pdf.Open("part2.pdf")
base.Append(part2)
base.Save("combined.pdf")Come riempio un campo AcroForm?
Usa Document.Form().Field(name) e specifica il tipo concreto:
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")Tipi di campo supportati: TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ButtonField.
Come aggiungo i segnalibri?
Crea un OutlineItemCollection e imposta un 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")Sicurezza e crittografia
Come proteggere un PDF con password?
Usa Document.SetEncryption con una struttura EncryptionOptions per applicare la protezione con password e i flag di autorizzazione. Fornisci una password utente per aprire il file e una password proprietario per i diritti di modifica:
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")Quali algoritmi di crittografia sono supportati?
Tre algoritmi sono disponibili tramite EncryptionOptions.Algorithm:
| Algorithm | Constant | Standard |
|---|---|---|
| AES-128 | EncryptionAlgAES128 (predefinito) | ISO 32000-1 |
| AES-256 | EncryptionAlgAES256 | ISO 32000-2 (output PDF 2.0) |
| RC4-128 | EncryptionAlgRC4_128 | Legacy |
Come aprire un file protetto da password?
Utilizza pdf.OpenWithPassword quando il file richiede l’autenticazione. Passa la password dell’utente come secondo argomento; restituisce un normale *Document una volta che la decrittazione ha successo:
doc, err := pdf.OpenWithPassword("protected.pdf", "userpass")
if err != nil {
panic(err)
}
fmt.Println(doc.PageCount())Come rimuovere la crittografia da un PDF?
Chiama Document.RemoveEncryption dopo aver aperto il file con la password corretta. Salva il risultato per scrivere una copia non crittografata:
doc, _ := pdf.OpenWithPassword("protected.pdf", "userpass")
doc.RemoveEncryption()
doc.Save("decrypted.pdf")Rendering e Testo
Come renderizzare una pagina PDF in un’immagine?
Utilizza uno dei tipi di dispositivo: BmpDevice, PngDevice, JpegDevice, TiffDevice o GifDevice. Costruisci il dispositivo con un valore Resolution e chiama il metodo corrispondente Render* con un io.Writer e 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})Come cerco del testo in un PDF?
Chiama Document.SearchText con una stringa di query e SearchOptions. Il risultato è una slice di valori TextMatch — ciascuno contiene il testo corrispondente, il suo indice di pagina e il suo riquadro delimitante.
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)
}Come appiattire un modulo?
Chiama Document.Flatten dopo aver compilato o revisionato un modulo. Il metodo incorpora tutti i valori dei campi nella grafica della pagina e rimuove i campi interattivi del modulo:
doc, _ := pdf.Open("filled.pdf")
doc.Flatten()
doc.Save("flat.pdf")Limitazioni note
Sono supportate tutte le funzionalità PDF?
La libreria copre le operazioni di gestione documentale più comuni: apertura, creazione, salvataggio, divisione, unione, estrazione di pagine, crittografia, AcroForms, tabelle, segnalibri, annotazioni, rendering in immagine, ricerca di testo e appiattimento dei moduli. Funzionalità avanzate come firme digitali, contenuti 3D e conversione PDF/A potrebbero non essere completamente implementate nella versione attuale. Controlla il README del repository per lo stato corrente delle funzionalità.
Cosa succede se utilizzo un’asserzione di tipo di campo che non corrisponde?
Un’asserzione di tipo su Field che non corrisponde al tipo di campo reale causerà un panic. Usa pdf.FieldType(f) per ispezionare il tipo prima di asserire, oppure utilizza un type switch:
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())
}
}