Perguntas Frequentes

Perguntas Frequentes

Licenciamento e código aberto

Qual é a licença para o FOSS for Go?

Aspose.PDF FOSS for Go is released under the Licença MIT.O texto completo da licença é: incluído no repositório em: github.com/aspose-pdf-foss/asspose - pdf-Foss-for-go. Não é necessário nenhum registo, arquivo de ativação ou chave de execução.

Posso usar o FOSS para ir num produto comercial?

Sim. A licença MIT permite uso comercial, modificação, distribuição e uso privado ilimitados. Você deve incluir o aviso de direitos autorais e o texto da licenca MIT em todas as cópias ou partes substanciais do software.

Existe uma versão empresarial?

Aspose.PDF FOSS is the open-source, MIT-licensed edition. A separate commercial Aspose.PDF product is available as the Aspose.PDF — Enterprise Product Family com suporte empresarial, cobertura de formato estendido e integração na nuvem.


Instalação e requisitos

Como posso instalar o FOSS para Go?

Adicionar o módulo ao seu projeto Go:

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

Importar com um alias nos arquivos de origem:

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

Qual é a versão do Go?

É necessário ir 1.24 ou posterior. Verifique a sua versão com o go version.

Há dependências de biblioteca nativa ou sistema?

Não. Aspose.PDF FOSS for Go é uma implementação pura de Go sem dependências em C, C++, ou CGo. Ele não requer bibliotecas do sistema, visores PDF nem ferramentas externas.


Utilização da API

Como eu abro um PDF existente?

Utilização: pdf.Open para PDFs padrão e pdf.OpenWithPassword para ficheiros protegidos por senha:

doc, err := pdf.Open("document.pdf")
if err != nil {
    panic(err)
}
fmt.Println(doc.PageCount())

Como dividir um PDF em páginas individuais?

Document.Split retorna um []*Document, uma por página:

doc, _ := pdf.Open("report.pdf")
pages, _ := doc.Split()
for i, p := range pages {
    p.Save(fmt.Sprintf("page_%03d.pdf", i+1))
}

Como eu unificar vários PDFs?

Document.Append Reunião de um documento-fonte no local:

base, _ := pdf.Open("part1.pdf")
part2, _ := pdf.Open("part2.pdf")
base.Append(part2)
base.Save("combined.pdf")

Como preencho um campo do AcroForm?

Utilização: Document.Form().Field(name) e indicar o tipo de 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")

Tipo de campo suportado: TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ButtonField.

Como adiciono marcadores?

Criar um OutlineItemCollection e definir um 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")

Segurança e criptografia

Como posso proteger um PDF por senha?

Utilização: Document.SetEncryption com um EncryptionOptions Fornecer uma senha de utilizador para abrir o ficheiro e uma palavra-passe do proprietário para direitos de modificação:

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

Que algoritmos de criptografia são suportados?

Três algoritmos estão disponíveis através de: EncryptionOptions.Algorithm:

Algoritmo de avaliaçãoConstantesPadrão
AES-128EncryptionAlgAES128 (default)ISO 32000-1
AES-256EncryptionAlgAES256ISO 32000-2 (PDF 2.0 de saída)
RC4-128EncryptionAlgRC4_128O legado

Como eu abro um arquivo protegido por senha?

Utilização: pdf.OpenWithPassword quando o arquivo requer autenticação. Passe a senha do usuário como segundo argumento; retorna um normal *Document Uma vez que a descriptação tiver sido bem-sucedida:

doc, err := pdf.OpenWithPassword("protected.pdf", "userpass")
if err != nil {
    panic(err)
}
fmt.Println(doc.PageCount())

Como eu removo a criptografia de um PDF?

Chama-me . Document.RemoveEncryption Salve o resultado para escrever uma cópia não criptografada:

doc, _ := pdf.OpenWithPassword("protected.pdf", "userpass")
doc.RemoveEncryption()
doc.Save("decrypted.pdf")

Rendering e Texto

Como faço para transformar uma página PDF em imagem?

Utilize um dos tipos de dispositivo: BmpDevice, PngDevice, JpegDevice, TiffDevice, ou GifDevice.Construir o dispositivo com um Resolution valor e chamar o correspondente Render* método com um io.Writer e a) 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})

Como procuro texto num PDF?

Chama-me . Document.SearchText com uma sequência de consulta e SearchOptions.O resultado é um fechada de TextMatch valores cada um contém o texto correspondente, seu índice de página e sua lista de páginas. caixa de limitação.

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

Como aplanar um formulário?

Chama-me . Document.Flatten O método corta todos os campos de dados e, em seguida, elimina o código-fonte. valores na página gráfica e remove os campos de formulário interativos:

doc, _ := pdf.Open("filled.pdf")
doc.Flatten()
doc.Save("flat.pdf")

Limitações conhecidas

Todos os recursos PDF são suportados?

A biblioteca abrange as operações de gerenciamento de documentos mais comuns: abrir, criar, salvar, dividir, fundir , extração de páginas, criptografia, AcroForms, tabelas, marcadores, anotações, renderização para imagem, pesquisa de texto e achatamento do formulário. recursos avançados como assinaturas digitais, conteúdo 3D e conversão PDF / A podem não ser totalmente implementados na versão atual. Verifique o repositório README para o status atualmente disponível.

O que acontece se eu usar uma afirmação tipo campo que não corresponde?

Uma afirmação de tipo sobre: Field que não corresponda ao tipo de campo real vai entrar em pânico. Utilização: pdf.FieldType(f) Para inspecionar o tipo antes de afirmar ou utilizar um interruptor de tipo:

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())
    }
}
 Português