Automatizar a localização de apresentações em Java

Visão geral

Aspose.Slides for Java permite que você configure metadados de revisão para porções individuais de texto. Use IBasePortionFormat.setLanguageId para identificar o idioma de revisão, IBasePortionFormat.setSpellCheck para permitir ou suprimir a verificação ortográfica e IBasePortionFormat.setProofDisabled para controlar o estado mais amplo de “não revisar”. Como essas configurações são aplicadas ao nível da porção, um parágrafo pode conter vários idiomas e diferentes regras de revisão.

Este artigo explica como atribuir um idioma a um texto específico, definir o idioma padrão para novo texto com LoadOptions.setDefaultTextLanguage, construir parágrafos multilíngues, escolher entre SpellCheck e ProofDisabled e preservar as configurações desejadas ao usar Presentation.joinPortionsWithSameFormatting. Essas propriedades armazenam metadados para aplicativos de apresentação; elas não traduzem texto, nem realizam verificação ortográfica baseada em dicionário ou retornam palavras incorretas.

Definir o idioma de revisão para o texto

Crie ou carregue uma Presentation, acesse a porção de texto necessária através de IPortion.getPortionFormat, e atribua seu identificador de idioma. O exemplo a seguir cria uma forma, define o inglês britânico como idioma de revisão e salva o resultado com Presentation.save:

import com.aspose.slides.IAutoShape;
import com.aspose.slides.IPortion;
import com.aspose.slides.ISlide;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeType;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 320, 80);
    shape.getTextFrame().setText("Set the proofing language for this text.");

    IPortion portion = shape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0);
    portion.getPortionFormat().setLanguageId("en-GB");

    presentation.save("proofing_language.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Definir o idioma padrão para novo texto

Use LoadOptions.setDefaultTextLanguage para especificar o idioma de revisão que o Aspose.Slides atribui ao texto recém‑criado. Essa configuração é útil quando a maior parte ou todo o novo texto de uma apresentação usa o mesmo idioma. Ela não altera os metadados de idioma de textos que já possuam um idioma explícito.

O exemplo a seguir cria uma apresentação cujo novo texto utiliza regras de revisão em alemão:

import com.aspose.slides.IAutoShape;
import com.aspose.slides.ISlide;
import com.aspose.slides.LoadOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeType;

LoadOptions loadOptions = new LoadOptions();
loadOptions.setDefaultTextLanguage("de-DE");

Presentation presentation = new Presentation(loadOptions);
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 320, 80);
    shape.getTextFrame().setText("Willkommen zur Präsentation");

    presentation.save("default_text_language.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Usar vários idiomas em um único parágrafo

Um IParagraph contém uma coleção de porções de texto. Crie uma Portion separada para cada idioma e defina seu LanguageId independentemente.

Este exemplo cria um parágrafo com porções em inglês e francês:

import com.aspose.slides.IAutoShape;
import com.aspose.slides.IParagraph;
import com.aspose.slides.ISlide;
import com.aspose.slides.Portion;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeType;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 420, 80);
    IParagraph paragraph = shape.getTextFrame().getParagraphs().get_Item(0);
    paragraph.getPortions().clear();

    Portion englishPortion = new Portion("Welcome");
    englishPortion.getPortionFormat().setLanguageId("en-US");
    paragraph.getPortions().add(englishPortion);

    Portion frenchPortion = new Portion(" — Bienvenue");
    frenchPortion.getPortionFormat().setLanguageId("fr-FR");
    paragraph.getPortions().add(frenchPortion);

    presentation.save("multilingual_text.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Habilitar ou suprimir a verificação ortográfica para porções individuais

IPortionFormat herda as propriedades de texto comuns definidas por IBasePortionFormat. Acesse o formato de uma porção através de IPortion.getPortionFormat e use IBasePortionFormat.setSpellCheck para controlar se um aplicativo de apresentação pode verificar a ortografia dessa porção. O valor padrão é false: true permite a verificação ortográfica, enquanto false a suprime.

A configuração se aplica a porções de texto individuais. Porções diferentes no mesmo parágrafo podem, portanto, usar valores distintos. IBasePortionFormat.setLanguageId e setSpellCheck têm propósitos complementares: setLanguageId identifica o idioma de revisão, enquanto setSpellCheck determina se a verificação ortográfica é permitida para a porção.

IBasePortionFormat.setProofDisabled também controla a revisão, mas representa o estado mais amplo de “não revisar” como um NullableBool. Use setSpellCheck quando precisar de um interruptor booleano direto especificamente para verificações ortográficas. Use setProofDisabled quando precisar preservar ou controlar explicitamente os metadados de “não revisão” da apresentação, incluindo seu estado NotDefined. Se você definir ambas as propriedades, mantenha seus valores consistentes; não combine setSpellCheck(true) com setProofDisabled(NullableBool.True).

Essas propriedades configuram metadados de revisão usados por PowerPoint e outros aplicativos de apresentação. O Aspose.Slides não os utiliza para executar verificação ortográfica baseada em dicionário ou para devolver uma lista de palavras incorretas.

O exemplo completo a seguir cria uma apresentação de entrada, carrega‑a, atribui diferentes configurações de verificação ortográfica e idiomas de revisão a duas porções no mesmo parágrafo, salva o resultado, reabre‑a e verifica os valores armazenados:

import com.aspose.slides.IAutoShape;
import com.aspose.slides.IParagraph;
import com.aspose.slides.IPortion;
import com.aspose.slides.IPortionCollection;
import com.aspose.slides.ISlide;
import com.aspose.slides.Portion;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeType;

String inputFile = "spell_check_input.pptx";
String outputFile = "spell_check_settings.pptx";

Presentation sourcePresentation = new Presentation();
try {
    ISlide sourceSlide = sourcePresentation.getSlides().get_Item(0);
    IAutoShape sourceShape = sourceSlide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 420, 80);
    IParagraph sourceParagraph = sourceShape.getTextFrame().getParagraphs().get_Item(0);
    sourceParagraph.getPortions().clear();

    Portion sourceEnglishPortion = new Portion("Check this text. ");
    sourceEnglishPortion.getPortionFormat().setLanguageId("en-US");
    sourceParagraph.getPortions().add(sourceEnglishPortion);

    Portion sourceFrenchPortion = new Portion("Ignorer ce code : ZX-81.");
    sourceFrenchPortion.getPortionFormat().setLanguageId("fr-FR");
    sourceParagraph.getPortions().add(sourceFrenchPortion);

    sourcePresentation.save(inputFile, SaveFormat.Pptx);
} finally {
    sourcePresentation.dispose();
}

Presentation presentation = new Presentation(inputFile);
try {
    IAutoShape shape = (IAutoShape) presentation.getSlides().get_Item(0).getShapes().get_Item(0);
    IPortionCollection portions = shape.getTextFrame().getParagraphs().get_Item(0).getPortions();

    IPortion checkedPortion = portions.get_Item(0);
    checkedPortion.getPortionFormat().setLanguageId("en-US");
    checkedPortion.getPortionFormat().setSpellCheck(true);

    IPortion suppressedPortion = portions.get_Item(1);
    suppressedPortion.getPortionFormat().setLanguageId("fr-FR");
    suppressedPortion.getPortionFormat().setSpellCheck(false);

    presentation.save(outputFile, SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Presentation reopenedPresentation = new Presentation(outputFile);
try {
    IAutoShape reopenedShape = (IAutoShape) reopenedPresentation.getSlides().get_Item(0).getShapes().get_Item(0);
    IPortionCollection storedPortions = reopenedShape.getTextFrame().getParagraphs().get_Item(0).getPortions();

    boolean firstPortionStored = storedPortions.getCount() == 2 && 
            "en-US".equals(storedPortions.get_Item(0).getPortionFormat().getLanguageId()) && 
            storedPortions.get_Item(0).getPortionFormat().getSpellCheck();

    boolean secondPortionStored = storedPortions.getCount() == 2 && 
            "fr-FR".equals(storedPortions.get_Item(1).getPortionFormat().getLanguageId()) && 
            !storedPortions.get_Item(1).getPortionFormat().getSpellCheck();

    if (firstPortionStored && secondPortionStored) {
        System.out.println("The proofing settings were stored correctly.");
    } else {
        System.out.println("The proofing settings could not be verified.");
    }
} finally {
    reopenedPresentation.dispose();
}

Presentation.joinPortionsWithSameFormatting combina porções adjacentes que tenham a mesma formatação. Uma diferença apenas em SpellCheck não impede que essas porções sejam unidas; após a junção, a porção resultante mantém o valor de SpellCheck da primeira porção. Se as porções precisarem de configurações de verificação ortográfica diferentes, chame joinPortionsWithSameFormatting antes de atribuir essas configurações, ou inspecione os limites da porção resultante e reaplique as configurações posteriormente. Porções com valores diferentes de LanguageId permanecem separadas porque a formatação de idioma de revisão difere.

FAQ

Um ID de idioma traduz o texto?

Não. IBasePortionFormat.setLanguageId armazena metadados de revisão para ortografia e gramática; ele não altera o conteúdo do texto. Traduza o texto separadamente e, em seguida, defina o identificador de idioma apropriado para cada porção traduzida.

O idioma de revisão controla fontes, hifenização ou quebra de linha?

Não. O identificador de idioma serve apenas para revisão. A renderização e o layout do texto dependem principalmente das fonts, do sistema de escrita e das configurações da caixa de texto. Para uma renderização confiável, forneça as fontes necessárias, configure a substituição de fontes ou incorpore fontes na apresentação.

Um parágrafo pode usar vários idiomas de revisão?

Sim. Atribua cada idioma a uma porção separada, como demonstrado no exemplo de parágrafo multilíngue.

Devo usar setDefaultTextLanguage ou setLanguageId?

Use LoadOptions.setDefaultTextLanguage quando quiser um idioma padrão para texto recém‑criado. Use IBasePortionFormat.setLanguageId quando uma porção específica precisar de um idioma de revisão explícito ou quando um parágrafo contiver vários idiomas.