Veelvoorkomende gebruikssituaties voor Aspose.PDF FOSS for Go

Veelvoorkomende gebruikssituaties voor Aspose.PDF FOSS for Go

Aspose.PDF FOSS for Go is een pure-Go module voor PDF-documentbeheer. Dit artikel behandelt de vaakst benodigde bewerkingen met de Document, Form, EncryptionOptions, Table en OutlineItemCollection types.

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

Stapsgewijze handleiding

Stap 1: Installeer het pakket

Voeg de Go-modulafhankelijkheid toe:

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

Stap 2: Importeer het pakket

Gebruik een alias om importreferenties beknopt te houden:

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

Stap 3: Splits een PDF in per-pagina bestanden

Document.Split verdeelt een document met meerdere pagina’s in één *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))

Stap 4: Voeg meerdere PDF’s samen tot één

Document.Append voegt pagina’s van een tweede document in-place samen voordat het wordt opgeslagen.

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

Stap 5: Pas wachtwoordversleuteling toe

EncryptionOptions configureert gebruikerswachtwoord, eigenaarwachtwoord, algoritme en per-operatie Permissions in één aanroep:

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

Om een platte-tekstkopie te produceren van een versleuteld bestand:

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

Stap 6: Vul een AcroForm

Itereer of richt je op velden op naam. Stel het concrete type vast (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")

Stap 7: Bouw een tabelindeling

Voeg een Table toe met Row en Cell items aan een pagina voor factuur- of rapportgeneratie:

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

Stap 8: Voeg een bladwijzerboom toe

OutlineItemCollection maakt bladwijzers met hoofdstuk/sectie-nesting en DestinationXYZ paginatargets:

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

Veelvoorkomende problemen en oplossingen

pdf.Open geeft een foutmelding voor geldige PDF-bestanden Controleer of het bestandspad correct is en dat het bestand niet openstaat in een ander proces. Op Windows kan bestandsvergrendeling lezen verhinderen.

Type-assertie paniek bij het benaderen van formuliervelden Gebruik pdf.FieldType(f) of een type-switch om het veldtype te inspecteren voordat je een assertie doet. Een *pdf.TextBoxField assertie op een CheckboxField zal paniek veroorzaken.

go get faalt met “module not found” Ensure GOPROXY is ingesteld op een bereikbare proxy (bijv. GOPROXY=direct) en dat uw netwerk kan bereiken github.com. In luchtgescheiden omgevingen, gebruik GONOSUMCHECK of een lokale module-spiegel.

SaveTo faalt na OpenWithPassword Als u aanroept Save after OpenWithPassword zonder aanroep RemoveEncryption, de uitvoer wordt opnieuw versleuteld met het oorspronkelijke wachtwoord. Dit is het verwachte gedrag — roep RemoveEncryption expliciet om een platte-tekstkopie te produceren.

Aantal pagina’s in samengevoegd document is onjuist Append mutert de ontvanger in-place. Zorg ervoor dat je niet aanroept Append op een document dat al is opgeslagen; open het basisedocument opnieuw als je meerdere samengevoegde uitvoerbestanden moet maken.


Veelgestelde vragen

Kan ik PDF-bestanden verwerken zonder naar schijf te schrijven?

Document.WriteTo accepteert een io.Writer, zodat je naar een buffer, netwerkstream of response writer kunt schrijven zonder een tijdelijk bestand te maken.

Is het veilig om Aspose.PDF FOSS voor Go gelijktijdig te gebruiken?

Elke *Document instantie is niet goroutine-veilig. Gebruik één Document per goroutine, of bescherm gedeelde instanties met een mutex.

Hoe lees ik veldwaarden terug van een ingevuld formulier?

Gebruik Field.Value() op elk veld of voer een type-assertie uit om toegang te krijgen tot type-specifieke accessors zoals CheckboxField.Checked() of ComboBoxField.SelectedIndex().

Kan ik een PDF vanaf nul maken zonder een bestaand sjabloon?

Ja. pdf.NewDocument() maakt een leeg document aan. Roep AddBlankPageFromFormat(pdf.PageFormatA4) aan om een lege pagina toe te voegen, voeg vervolgens inhoud (tabellen, annotaties, enz.) toe voordat je opslaat.

Wat is het verschil tussen Document.Save en Document.WriteTo?

Save(path string) schrijft naar een bestandspad. WriteTo(w io.Writer) schrijft naar elke io.Writer — handig voor HTTP reacties, buffers, of stream-pijplijnen.


Zie ook

 Nederlands