Gerenciar objetos de tinta de apresentação no Android

Introdução

O PowerPoint oferece um recurso de tinta que permite desenhar traços livres. A tinta pode ser usada para destacar outros objetos, mostrar conexões e processos, e chamar a atenção para itens específicos em um slide.

O Aspose.Slides fornece os tipos necessários para trabalhar com objetos de tinta. Por exemplo, a interface IInk representa um objeto de tinta em um slide.

Diferenças entre Objetos Regulares e Objetos de Tinta

Objetos em um slide do PowerPoint são tipicamente representados por objetos de forma. Na forma mais simples, uma forma é um contêiner que define a área do próprio objeto (sua moldura) juntamente com propriedades como tamanho do contêiner, forma e plano de fundo. Para mais informações, veja Shape Layout Format.

Entretanto, quando o PowerPoint lida com um objeto de tinta, ele ignora todas as propriedades da moldura do objeto (contêiner) exceto o seu tamanho. O tamanho da área do contêiner é determinado pelos métodos padrão IShape.getWidth e IShape.getHeight :

ink_powerpoint1

Traços de Tinta

Um traço de tinta é um elemento básico usado para registrar a trajetória de uma caneta enquanto o usuário escreve tinta digital. Um traço armazena uma sequência de pontos conectados.

A forma mais simples de codificação especifica as coordenadas X e Y de cada ponto de amostra. Quando todos os pontos conectados são renderizados, eles produzem uma imagem como esta:

ink_powerpoint2

Propriedades do Pincel para Desenho

Um pincel é usado para desenhar linhas que conectam os pontos de um traço de tinta. O pincel tem sua própria cor e tamanho, representados pelos métodos IInkBrush.getColor e IInkBrush.getSize .

Definir Cor do Pincel de Tinta

Este código Java mostra como definir a cor de um pincel de tinta:

import android.graphics.Color;
import com.aspose.slides.*;

Presentation presentation = new Presentation("pres.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IInk ink = (IInk) slide.getShapes().get_Item(0);
    IInkBrush brush = ink.getTraces()[0].getBrush();
    brush.setColor(Color.RED);
} finally {
    presentation.dispose();
}

Definir Tamanho do Pincel de Tinta

Este código Java mostra como definir o tamanho de um pincel de tinta:

import com.aspose.slides.*;
import com.aspose.slides.android.SizeF;

Presentation presentation = new Presentation("pres.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IInk ink = (IInk) slide.getShapes().get_Item(0);
    IInkBrush brush = ink.getTraces()[0].getBrush();
    SizeF brushSize = new SizeF(5, 10);
    brush.setSize(brushSize);
} finally {
    presentation.dispose();
}

Geralmente, a largura e a altura de um pincel não coincidem, portanto o PowerPoint não exibe o tamanho do pincel (a seção de dados correspondente fica esmaecida). Quando a largura e a altura do pincel coincidem, o PowerPoint exibe seu tamanho da seguinte forma:

ink_powerpoint3

Para clareza, vamos aumentar a altura do objeto de tinta e revisar as dimensões importantes:

ink_powerpoint4

O contêiner (moldura) não leva em conta o tamanho dos pincéis — ele sempre assume que a espessura da linha é zero (veja a imagem anterior).

Portanto, para determinar a área visível de todo o objeto de tinta, é necessário considerar o tamanho do pincel de seus traços. Aqui, o objeto de destino (o traço de texto manuscrito) foi escalado para o tamanho do contêiner (moldura). Quando o tamanho do contêiner muda, o tamanho do pincel permanece constante, e vice‑versa.

ink_powerpoint5

O PowerPoint usa comportamento semelhante para objetos de texto:

ink_powerpoint6

Controlar a Aparência da Tinta Durante Exportação e Renderização

O Aspose.Slides fornece a interface IInkOptions para controlar como os objetos de tinta aparecem na saída exportada ou renderizada. Você pode usar suas propriedades para ocultar a tinta completamente ou alterar como as operações de máscara do pincel de tinta são interpretadas.

As opções de tinta estão disponíveis através das opções de exportação ou renderização para vários tipos de saída:

Saída Propriedade de opções de tinta
PDF PdfOptions.getInkOptions
HTML HtmlOptions.getInkOptions
SVG SVGOptions.getInkOptions
TIFF TiffOptions.getInkOptions
Imagem de slide RenderingOptions.getInkOptions

Os seguintes métodos da IInkOptions expõem as mesmas duas configurações:

Ocultar Objetos de Tinta na Saída PDF

Por padrão, os objetos de tinta permanecem visíveis durante a exportação. Para criar uma saída limpa sem anotações manuscritas ou outro conteúdo de tinta, chame IInkOptions.setHideInk com true.

O exemplo Java a seguir exporta uma apresentação para PDF ocultando todos os objetos de tinta:

import com.aspose.slides.*;

Presentation presentation = new Presentation("presentation.pptx");
try {
    PdfOptions pdfOptions = new PdfOptions();
    pdfOptions.getInkOptions().setHideInk(true);

    presentation.save("presentation_without_ink.pdf", SaveFormat.Pdf, pdfOptions);
} finally {
    presentation.dispose();
}

Ocultar Objetos de Tinta ao Renderizar um Slide como Imagem

Para ocultar objetos de tinta ao renderizar slides como imagens bitmap, configure RenderingOptions.getInkOptions e passe as opções de renderização para ISlide.getImage.

O exemplo Java a seguir renderiza o primeiro slide como imagem PNG sem objetos de tinta:

import com.aspose.slides.*;

Presentation presentation = new Presentation("presentation.pptx");
try {
    RenderingOptions renderingOptions = new RenderingOptions();
    renderingOptions.getInkOptions().setHideInk(true);

    ISlide slide = presentation.getSlides().get_Item(0);
    IImage image = slide.getImage(renderingOptions);
    try {
        image.save("slide_without_ink.png", ImageFormat.Png);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

Controlar a Renderização da Máscara de Tinta

A configuração IInkOptions.getInterpretMaskOpAsOpacity controla como as operações de máscara são interpretadas ao renderizar pincéis de tinta. O valor padrão é true, que usa opacidade. Para usar a operação ROP em vez disso, chame IInkOptions.setInterpretMaskOpAsOpacity com false.

O exemplo Java a seguir exporta um slide para SVG e usa renderização baseada em ROP para operações de máscara de tinta:

import com.aspose.slides.*;
import java.io.FileOutputStream;

Presentation presentation = new Presentation("presentation.pptx");
try {
    SVGOptions svgOptions = new SVGOptions();
    svgOptions.getInkOptions().setInterpretMaskOpAsOpacity(false);

    ISlide slide = presentation.getSlides().get_Item(0);
    FileOutputStream stream = new FileOutputStream("slide.svg");
    try {
        slide.writeAsSvg(stream, svgOptions);
    } finally {
        stream.close();
    }
} finally {
    presentation.dispose();
}

A mesma configuração pode ser aplicada através de TiffOptions.getInkOptions ao exportar uma apresentação ou renderizar um slide para TIFF.

Escolher Entre Ocultar ou Preservar a Tinta

Quando precisar de uma versão limpa de uma apresentação anotada para distribuição sem marcas de revisão, chame IInkOptions.setHideInk com true durante a exportação.

Deixe IInkOptions.getHideInk em seu valor padrão false quando as anotações de tinta fizerem parte do conteúdo desejado, como comentários de revisão, notas manuscritas, realces ou desenhos que devem permanecer visíveis no resultado exportado. Isso permite que aplicativos gerem saídas de revisão e final separadas a partir da mesma apresentação sem modificar os objetos de tinta originais.

Perguntas Frequentes

Posso mudar a cor ou o tamanho de um traço de tinta existente?

Sim. Obtenha o traço a partir de IInk.getTraces, então altere seu IInkTrace.getBrush. Chame IInkBrush.setColor ou IInkBrush.setSize para mudar o pincel.

Ocultar a tinta altera a apresentação original?

Não. Chamar IInkOptions.setHideInk afeta apenas o resultado renderizado ou exportado; não remove nem modifica os objetos de tinta na apresentação fonte.

Quais formatos de exportação suportam opções de tinta?

Você pode configurar opções de tinta para PDF, HTML, SVG, TIFF e imagens bitmap de slides através das opções de exportação ou renderização correspondentes mostradas acima.

Leitura adicional