Najczęściej zadawane pytania
Licencjonowanie i Open Source
Jaka jest licencja dla Aspose.PDF FOSS for Go?
Aspose.PDF FOSS dla Go jest wydany na MIT License. Pełny tekst licencji jest dołączony w repozytorium pod adresem github.com/aspose-pdf-foss/aspose-pdf-foss-for-go. Nie wymagana jest rejestracja, plik aktywacyjny ani klucz uruchomieniowy.
Czy mogę używać Aspose.PDF FOSS for Go w produkcie komercyjnym?
Tak. Licencja MIT zezwala na nieograniczone użycie komercyjne, modyfikację, dystrybucję i prywatne korzystanie. Należy dołączyć informację o prawach autorskich oraz tekst licencji MIT we wszystkich kopiach lub istotnych fragmentach oprogramowania.
Czy istnieje wersja enterprise?
Aspose.PDF FOSS jest otwarto-źródłową, wydaną na licencji MIT edycją. Oddzielny komercyjny produkt Aspose.PDF jest dostępny jako Aspose.PDF — Enterprise Product Family z wsparciem przedsiębiorstwa, rozszerzonym zakresem formatów oraz integracją z chmurą.
Instalacja i wymagania
Jak zainstalować Aspose.PDF FOSS dla Go?
Dodaj moduł do swojego projektu Go:
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goZaimportuj go z aliasem w swoich plikach źródłowych:
import pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"Jaka wersja Go jest wymagana?
Wymagany jest Go 1.24 lub nowszy. Sprawdź swoją wersję przy użyciu go version.
Czy istnieją natywne lub systemowe zależności bibliotek?
Nr. Aspose.PDF FOSS for Go jest czystą implementacją w Go, bez zależności C, C++ ani CGo. Nie wymaga żadnych bibliotek systemowych, przeglądarek PDF ani zewnętrznych narzędzi.
API Usage
Jak otworzyć istniejący plik PDF?
Użyj pdf.Open dla standardowych plików PDF oraz pdf.OpenWithPassword dla plików zabezpieczonych hasłem:
doc, err := pdf.Open("document.pdf")
if err != nil {
panic(err)
}
fmt.Println(doc.PageCount())Jak podzielić plik PDF na pojedyncze strony?
Document.Split zwraca []*Document, po jednym na stronę:
doc, _ := pdf.Open("report.pdf")
pages, _ := doc.Split()
for i, p := range pages {
p.Save(fmt.Sprintf("page_%03d.pdf", i+1))
}Jak połączyć wiele plików PDF?
Document.Append scala dokument źródłowy na miejscu:
base, _ := pdf.Open("part1.pdf")
part2, _ := pdf.Open("part2.pdf")
base.Append(part2)
base.Save("combined.pdf")Jak wypełnić pole AcroForm?
Użyj Document.Form().Field(name) i określ konkretny typ:
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")Obsługiwane typy pól: TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ButtonField.
Jak dodać zakładki?
Utwórz OutlineItemCollection i ustaw 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")Bezpieczeństwo i szyfrowanie
Jak zabezpieczyć PDF hasłem?
Użyj Document.SetEncryption ze strukturą EncryptionOptions, aby zastosować ochronę hasłem i flagi uprawnień. Podaj hasło użytkownika do otwierania pliku oraz hasło właściciela do praw modyfikacji:
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")Jakie algorytmy szyfrowania są obsługiwane?
Trzy algorytmy są dostępne przez EncryptionOptions.Algorithm:
| Algorithm | Constant | Standard |
|---|---|---|
| AES-128 | EncryptionAlgAES128 (domyślne) | ISO 32000-1 |
| AES-256 | EncryptionAlgAES256 | ISO 32000-2 (wyjście PDF 2.0) |
| RC4-128 | EncryptionAlgRC4_128 | Legacy |
Jak otworzyć plik zabezpieczony hasłem?
Użyj pdf.OpenWithPassword, gdy plik wymaga uwierzytelnienia. Przekaż hasło użytkownika jako drugi argument; zwróci normalny *Document, gdy odszyfrowanie się powiedzie:
doc, err := pdf.OpenWithPassword("protected.pdf", "userpass")
if err != nil {
panic(err)
}
fmt.Println(doc.PageCount())Jak usunąć szyfrowanie z pliku PDF?
Wywołaj Document.RemoveEncryption po otwarciu pliku z poprawnym hasłem. Zapisz wynik, aby utworzyć niezaszyfrowaną kopię:
doc, _ := pdf.OpenWithPassword("protected.pdf", "userpass")
doc.RemoveEncryption()
doc.Save("decrypted.pdf")Renderowanie i tekst
Jak wyrenderować stronę PDF do obrazu?
Użyj jednego z typów urządzeń: BmpDevice, PngDevice, JpegDevice, TiffDevice lub GifDevice. Skonstruuj urządzenie z wartością Resolution i wywołaj odpowiednią metodę Render* z io.Writer i 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})Jak wyszukać tekst w pliku PDF?
Wywołaj Document.SearchText z ciągiem zapytania i SearchOptions. Wynik jest wycinką wartości TextMatch — każda zawiera dopasowany tekst, indeks strony i jej ramkę ograniczającą.
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)
}Jak spłaszczyć formularz?
Wywołaj Document.Flatten po wypełnieniu lub przeglądzie formularza. Metoda wstawia wszystkie wartości pól do grafiki strony i usuwa interaktywne pola formularza:
doc, _ := pdf.Open("filled.pdf")
doc.Flatten()
doc.Save("flat.pdf")Znane ograniczenia
Czy wszystkie funkcje PDF są obsługiwane?
Biblioteka obejmuje najczęstsze operacje zarządzania dokumentami: otwieranie, tworzenie, zapisywanie, dzielenie, scalanie, wyodrębnianie stron, szyfrowanie, AcroForms, tabele, zakładki, adnotacje, renderowanie do obrazu, wyszukiwanie tekstu oraz spłaszczanie formularzy. Zaawansowane funkcje, takie jak podpisy cyfrowe, treść 3D oraz konwersja PDF/A, mogą nie być w pełni zaimplementowane w bieżącym wydaniu. Sprawdź plik README repozytorium, aby poznać aktualny stan funkcji.
Co się stanie, jeśli użyję asercji typu pola, która nie pasuje?
Asercja typu na Field, która nie pasuje do rzeczywistego typu pola, spowoduje panikę. Użyj pdf.FieldType(f), aby sprawdzić typ przed asercją, lub użyj przełącznika typów:
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())
}
}