Manipular Documento PDF em Python via .NET
Manipular Documento PDF em Python
Validar Documento PDF para o Padrão PDF A (A 1A e A 1B)
Para validar um documento PDF para compatibilidade com PDF/A-1a ou PDF/A-1b, use o método validate da classe Document. Este método permite que você especifique o nome do arquivo no qual o resultado deve ser salvo e o tipo de validação necessário na enumeração PdfFormat: PDF_A_1A ou PDF_A_1B.
O trecho de código a seguir mostra como validar um documento PDF para PDF/A-1A.
import aspose.pdf as ap
# Abrir documento
document = ap.Document(input_pdf)
# Validar PDF para PDF/A-1a
document.validate(output_xml, ap.PdfFormat.PDF_A_1A)
O trecho de código a seguir mostra como validar um documento PDF para PDF/A-1b.
import aspose.pdf as ap
# Abrir documento
document = ap.Document(input_pdf)
# Validar PDF para PDF/A-1a
document.validate(output_xml, ap.PdfFormat.PDF_A_1B)
Trabalhando com TOC
Adicionar TOC a um PDF Existente
TOC em PDF significa “Tabela de Conteúdos”. É um recurso que permite aos usuários navegar rapidamente por um documento, fornecendo uma visão geral de suas seções e títulos.
Para adicionar um TOC a um arquivo PDF existente, use a classe Heading no namespace aspose.pdf. O namespace aspose.pdf pode tanto criar novos arquivos PDF quanto manipular arquivos PDF existentes. Para adicionar um TOC a um PDF existente, use o namespace Aspose.Pdf. O trecho de código a seguir mostra como criar uma tabela de conteúdos dentro de um arquivo PDF existente usando Python via .NET.
import aspose.pdf as ap
# Carregar um arquivo PDF existente
doc = ap.Document(input_pdf)
# Obter acesso à primeira página do arquivo PDF
tocPage = doc.pages.insert(1)
# Criar objeto para representar informações do TOC
tocInfo = ap.TocInfo()
title = ap.text.TextFragment("Tabela de Conteúdos")
title.text_state.font_size = 20
title.text_state.font_style = ap.text.FontStyles.BOLD
# Definir o título para o TOC
tocInfo.title = title
tocPage.toc_info = tocInfo
# Criar objetos de string que serão usados como elementos do TOC
titles = ["Primeira página", "Segunda página", "Terceira página", "Quarta página"]
for i in range(0, 2):
# Criar objeto Heading
heading2 = ap.Heading(1)
segment2 = ap.text.TextSegment()
heading2.toc_page = tocPage
heading2.segments.append(segment2)
# Especificar a página de destino para o objeto heading
heading2.destination_page = doc.pages[i + 2]
# Página de destino
heading2.top = doc.pages[i + 2].rect.height
# Coordenada de destino
segment2.text = titles[i]
# Adicionar heading à página que contém o TOC
tocPage.paragraphs.add(heading2)
# Salvar o documento atualizado
doc.save(output_pdf)
Definir diferentes TabLeaderType para diferentes níveis de TOC
Aspose.PDF para Python também permite definir diferentes TabLeaderType para diferentes níveis de TOC. Você precisa definir a propriedade line_dash de TocInfo.
import aspose.pdf as ap
doc = ap.Document()
tocPage = doc.pages.add()
toc_info = ap.TocInfo()
# definir LeaderType
toc_info.line_dash = ap.text.TabLeaderType.SOLID
title = ap.text.TextFragment("Índice")
title.text_state.font_size = 30
toc_info.title = title
# Adicionar a seção de lista à coleção de seções do documento Pdf
tocPage.toc_info = toc_info
# Definir o formato da lista de quatro níveis configurando as margens à esquerda
# e
# configurações de formato de texto de cada nível
toc_info.format_array_length = 4
toc_info.format_array[0].margin.left = 0
toc_info.format_array[0].margin.right = 30
toc_info.format_array[0].line_dash = ap.text.TabLeaderType.DOT
toc_info.format_array[0].text_state.font_style = ap.text.FontStyles.BOLD | ap.text.FontStyles.ITALIC
toc_info.format_array[1].margin.left = 10
toc_info.format_array[1].margin.right = 30
toc_info.format_array[1].line_dash = 3
toc_info.format_array[1].text_state.font_size = 10
toc_info.format_array[2].margin.left = 20
toc_info.format_array[2].margin.right = 30
toc_info.format_array[2].text_state.font_style = ap.text.FontStyles.BOLD
toc_info.format_array[3].line_dash = ap.text.TabLeaderType.SOLID
toc_info.format_array[3].margin.left = 30
toc_info.format_array[3].margin.right = 30
toc_info.format_array[3].text_state.font_style = ap.text.FontStyles.BOLD
# Criar uma seção no documento Pdf
page = doc.pages.add()
# Adicionar quatro cabeçalhos na seção
for Level in range(1, 5):
heading2 = ap.Heading(Level)
segment2 = ap.text.TextSegment()
heading2.segments.append(segment2)
heading2.is_auto_sequence = True
heading2.toc_page = tocPage
segment2.text = "Cabeçalho de Exemplo" + str(Level)
heading2.text_state.font = ap.text.FontRepository.find_font("Arial")
# Adicionar o cabeçalho ao Índice.
heading2.is_in_list = True
page.paragraphs.add(heading2)
# salvar o Pdf
doc.save(output_pdf)
Ocultar Números de Página no TOC
Caso você não queira exibir números de página, junto com os títulos no TOC, você pode usar a propriedade is_show_page_numbers da Classe TocInfo como falso. Por favor, verifique o seguinte trecho de código para ocultar os números de página no índice:
import aspose.pdf as ap
doc = ap.Document()
toc_page = doc.pages.add()
toc_info = ap.TocInfo()
title = ap.text.TextFragment("Índice")
title.text_state.font_size = 20
title.text_state.font_style = ap.text.FontStyles.BOLD
toc_info.title = title
# Adicionar a seção da lista à coleção de seções do documento Pdf
toc_page.toc_info = toc_info
# Definir o formato da lista de quatro níveis configurando as margens esquerdas e
# configurações de formato de texto de cada nível
toc_info.is_show_page_numbers = False
toc_info.format_array_length = 4
toc_info.format_array[0].margin.right = 0
toc_info.format_array[0].text_state.font_style = ap.text.FontStyles.BOLD | ap.text.FontStyles.ITALIC
toc_info.format_array[1].margin.left = 30
toc_info.format_array[1].text_state.underline = True
toc_info.format_array[1].text_state.font_size = 10
toc_info.format_array[2].text_state.font_style = ap.text.FontStyles.BOLD
toc_info.format_array[3].text_state.font_style = ap.text.FontStyles.BOLD
page = doc.pages.add()
# Adicionar quatro títulos na seção
for Level in range(1, 5):
heading2 = ap.Heading(Level)
segment2 = ap.text.TextSegment()
heading2.toc_page = toc_page
heading2.segments.append(segment2)
heading2.is_auto_sequence = True
segment2.text = "este é o título do nível " + str(Level)
heading2.is_in_list = True
page.paragraphs.add(heading2)
doc.save(output_pdf)
Personalizar Números de Página ao Adicionar TOC
É comum personalizar a numeração de páginas no TOC ao adicionar TOC em um documento PDF. Por exemplo, podemos precisar adicionar algum prefixo antes do número da página como P1, P2, P3 e assim por diante. Nesse caso, o Aspose.PDF para Python fornece a propriedade page_numbers_prefix da classe TocInfo que pode ser usada para personalizar os números de página conforme mostrado no exemplo de código a seguir.
import aspose.pdf as ap
# Carregar um arquivo PDF existente
doc = ap.Document(input_pdf)
# Obter acesso à primeira página do arquivo PDF
toc_page = doc.pages.insert(1)
# Criar objeto para representar as informações do TOC
toc_info = ap.TocInfo()
title = ap.text.TextFragment("Índice")
title.text_state.font_size = 20
title.text_state.font_style = ap.text.FontStyles.BOLD
# Definir o título para o TOC
toc_info.title = title
toc_info.page_numbers_prefix = "P"
toc_page.toc_info = toc_info
for i in range(len(doc.pages)):
# Criar objeto de Título
heading2 = ap.Heading(1)
segment2 = ap.text.TextSegment()
heading2.toc_page = toc_page
heading2.segments.append(segment2)
# Especificar a página de destino para o objeto de título
heading2.destination_page = doc.pages[i + 1]
# Página de destino
heading2.top = doc.pages[i + 1].rect.height
# Coordenada de destino
segment2.text = "Página " + str(i)
# Adicionar título à página contendo o TOC
toc_page.paragraphs.add(heading2)
# Salvar o documento atualizado
doc.save(output_pdf)
Como definir a data de expiração do PDF
Aplicamos privilégios de acesso em arquivos PDF para que um determinado grupo de usuários possa acessar recursos/objetos específicos de documentos PDF. Para restringir o acesso ao arquivo PDF, geralmente aplicamos criptografia e podemos ter a necessidade de definir a expiração do arquivo PDF, para que o usuário que acessa/visualiza o documento receba um aviso válido sobre a expiração do arquivo PDF.
import aspose.pdf as ap
# Instanciar objeto Document
doc = ap.Document()
# Adicionar página à coleção de páginas do arquivo PDF
doc.pages.add()
# Adicionar fragmento de texto à coleção de parágrafos do objeto página
doc.pages[1].paragraphs.add(ap.text.TextFragment("Olá Mundo..."))
# Criar objeto JavaScript para definir a data de expiração do PDF
javaScript = ap.annotations.JavascriptAction(
"var year=2017;"
+ "var month=5;"
+ "today = new Date(); today = new Date(today.getFullYear(), today.getMonth());"
+ "expiry = new Date(year, month);"
+ "if (today.getTime() > expiry.getTime())"
+ "app.alert('O arquivo expirou. Você precisa de um novo.');"
)
# Definir JavaScript como ação de abertura do PDF
doc.open_action = javaScript
# Salvar documento PDF
doc.save(output_pdf)
Flatten Fillable PDF em Python
Documentos PDF frequentemente incluem formulários com widgets interativos preenchíveis, tais como botões de rádio, caixas de seleção, caixas de texto, listas, etc. Para torná-los não editáveis para várias finalidades de aplicação, precisamos achatar o arquivo PDF. Aspose.PDF fornece a função para achatar seu PDF em Python com apenas algumas linhas de código:
import aspose.pdf as ap
# Carregar formulário PDF de origem
doc = ap.Document(input_pdf)
# Achatar PDF preenchível
if len(doc.form.fields) > 0:
for item in doc.form.fields:
item.flatten()
# Salvar o documento atualizado
doc.save(output_pdf)