Formatar documentos PDF em Java

Formatação no Aspose.PDF for Java inclui comportamento do visualizador, incorporação de fontes e configurações de exibição.

Obter configurações da janela do documento

Use este exemplo para inspecionar as preferências de visualização atuais armazenadas em um documento PDF existente.

  1. Abra o PDF de origem em um objeto Document.
  2. Leia as propriedades de janela e exibição necessárias do documento.
  3. Exiba as configurações atuais para inspeção ou depuração.
public static void getDocumentWindow(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        System.out.println("CenterWindow: " + document.isCenterWindow());
        System.out.println("Direction: " + document.getDirection());
        System.out.println("DisplayDocTitle: " + document.isDisplayDocTitle());
        System.out.println("FitWindow: " + document.isFitWindow());
        System.out.println("HideMenuBar: " + document.isHideMenubar());
        System.out.println("HideToolBar: " + document.isHideToolBar());
        System.out.println("HideWindowUI: " + document.isHideWindowUI());
        System.out.println("NonFullScreenPageMode: " + document.getNonFullScreenPageMode());
        System.out.println("PageLayout: " + document.getPageLayout());
        System.out.println("PageMode: " + document.getPageMode());
    }
}

Definir preferências da janela do documento

Este exemplo atualiza como o PDF deve ser exibido quando aberto em um visualizador compatível.

  1. Abra o PDF de origem em um objeto Document.
  2. Defina as preferências de janela, layout e modo de página necessárias.
  3. Salve o PDF atualizado Document.
public static void setDocumentWindow(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        document.setCenterWindow(true);
        document.setDirection(Direction.R2L);
        document.setDisplayDocTitle(true);
        document.setFitWindow(true);
        document.setHideMenubar(true);
        document.setHideToolBar(true);
        document.setHideWindowUI(true);
        document.setNonFullScreenPageMode(PageMode.UseOC);
        document.setPageLayout(PageLayout.TwoColumnLeft);
        document.setPageMode(PageMode.UseThumbs);
        document.save(outputFile.toString());
    }
}

Incorporar fontes em um PDF existente

Use esta abordagem quando um documento deve conter as fontes necessárias para uma renderização mais confiável em outros sistemas.

  1. Abra o PDF de origem em um objeto Document.
  2. Habilite incorporação de fontes padrão e itere pelas fontes usadas por cada Page.
  3. Marcar qualquer não incorporado objetos Font para incorporação.
  4. Salve o documento atualizado.
public static void embeddedFonts(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        document.setEmbedStandardFonts(true);
        for (Page page : document.getPages()) {
            for (Font pageFont : page.getResources().getFonts()) {
                if (!pageFont.isEmbedded()) {
                    pageFont.setEmbedded(true);
                }
            }
        }
        document.save(outputFile.toString());
    }
}

Incorporar fontes ao criar um novo PDF

Este exemplo cria um novo PDF e atribui uma fonte incorporada ao conteúdo de texto desde o início.

  1. Crie um novo documento PDF Document e adicione um Page.
  2. Crie o necessário TextFragment, TextSegment, e TextState.
  3. Resolva o alvo Font do repositório e marcá-lo como incorporado.
  4. Adicione o conteúdo de texto à página e salve o documento de saída.
public static void embeddedFontsInNewDocument(Path outputFile) {
    try (Document document = new Document()) {
        try (Page page = document.getPages().add()) {
            TextFragment fragment = new TextFragment("");
            TextSegment segment = new TextSegment(" This is a sample text using Custom font.");
            TextState textState = new TextState();
            Font font = FontRepository.findFont("Arial");
            font.setEmbedded(true);
            textState.setFont(font);
            segment.setTextState(textState);
            fragment.getSegments().add(segment);
            page.getParagraphs().add(fragment);
        }
        document.save(outputFile.toString());
    }
}

Definir uma Font padrão para a saída PDF

Use este padrão quando o documento salvo deve recorrer a uma fonte específica durante a geração da saída.

  1. Abra o PDF de origem em um objeto Document.
  2. Crie PdfSaveOptions e defina o nome da Font padrão.
  3. Salve o documento com as opções de salvamento configuradas.
public static void setDefaultFont(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        PdfSaveOptions saveOptions = new PdfSaveOptions();
        saveOptions.setDefaultFontName("Arial");
        document.save(outputFile.toString(), saveOptions);
    }
}

Obter todas as fontes usadas em um PDF

Este exemplo lista todas as Font detectadas no documento para que você possa auditar o uso de Font antes de exportar ou atualizar o arquivo.

  1. Abra o PDF de origem em um objeto Document.
  2. Enumere as fontes retornadas pelos utilitários de fontes do documento.
  3. Exiba o nome de cada detectado Font.
public static void getAllFonts(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        for (Font font : document.getFontUtilities().getAllFonts()) {
            System.out.println(font.getFontName());
        }
    }
}

Melhorar a incorporação de Font por subdefinição de fonts

Use esta abordagem quando quiser reduzir a carga de fontes enquanto mantém os dados de fontes incorporadas alinhados ao uso do documento.

  1. Abra o PDF de origem em um objeto Document.
  2. Execute a subdefinição de fontes através das utilidades de fontes do documento com o necessário FontSubsetStrategy valores.
  3. Salve o documento otimizado.
public static void improveFontsEmbedding(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        document.getFontUtilities().subsetFonts(FontSubsetStrategy.SubsetAllFonts);
        document.getFontUtilities().subsetFonts(FontSubsetStrategy.SubsetEmbeddedFontsOnly);
        document.save(outputFile.toString());
    }
}

Definir o fator de zoom ao abrir o documento

Este exemplo configura o nível de zoom inicial que deve ser aplicado quando o PDF é aberto.

  1. Abra o PDF de origem em um objeto Document.
  2. Crie um GoToAction com um XYZExplicitDestination.
  3. Atribua a ação como a ação de abertura do documento e salve o resultado.
public static void setZoomFactor(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        GoToAction action = new GoToAction(new XYZExplicitDestination(1, 0.0, 0.0, 0.5));
        document.setOpenAction(action);
        document.save(outputFile.toString());
    }
}

Obter o fator de zoom de abertura do documento

Use este exemplo para verificar se um PDF já define um nível de zoom explícito para sua ação de abertura.

  1. Abra o PDF de origem em um objeto Document.
  2. Verifique se a ação de abertura é um GoToAction com um XYZExplicitDestination.
  3. Exiba o valor de zoom configurado ou informe que nenhum zoom está definido.
public static void getZoomFactor(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        if (document.getOpenAction() instanceof GoToAction action
                && action.getDestination() instanceof XYZExplicitDestination destination) {
            System.out.println("Zoom: " + destination.getZoom());
        } else {
            System.out.println("Zoom: not set");
        }
    }
}