Criar arquivos PDF em Java

Aspose.PDF for Java oferece suporte tanto à criação simples de documentos quanto a fluxos de trabalho de PDF pesquisáveis assistidos por OCR.

Criar um novo documento PDF

Use esta abordagem quando precisar gerar um arquivo PDF simples do zero.

  1. Crie um novo documento PDF Document.
  2. Adicione um Page para o documento.
  3. Crie um TextFragment e adicione-o à página.
  4. Salve o PDF de saída Document.
public static void createNewDocument(Path outputFile) {
    try (Document document = new Document()) {
        Page page = document.getPages().add();
        page.getParagraphs().add(new TextFragment("Hello World!"));
        document.save(outputFile.toString());
    }
}

Criar um PDF pesquisável

O createSearchablePdf exemplos de uso Document.convert(...) com um CallBackGetHocr implementação. O callback grava a imagem de origem em um arquivo temporário, invoca o Tesseract com o hocr opção, lê a marcação HOCR gerada e a retorna ao Aspose.PDF.

  1. Abra o PDF de origem em um objeto Document.
  2. Crie o CallBackGetHocr callback e converta o documento de origem em conteúdo PDF pesquisável.
  3. Salve o PDF atualizado Document.
public static void createSearchablePdf(Path inputFile, Path outputFile) {
    Path tempDir = outputFile.getParent().resolve("ocr-temp");
    CallBackGetHocr cbgh = new CallBackGetHocr() {
        @Override
        public String invoke(java.awt.image.BufferedImage img) {
            // save the image, run Tesseract with "hocr", and return the HOCR text
            return fileContents.toString();
        }
    };
    try (Document document = new Document(inputFile.toString())) {
        document.convert(cbgh);
        document.save(outputFile.toString());
    }
}

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 a incorporação padrão de font e itere pelas fonts usadas por cada Page.
  3. Marque 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 fonte padrão para saída PDF

Use este padrão quando o documento salvo deve voltar 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 fonte 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 fontes detectadas no documento para que você possa auditar o uso de fontes antes de exportar ou atualizar o arquivo.

  1. Abra o PDF de origem em um objeto Document.
  2. Enumerar as fontes retornadas pelas utilidades 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 fontes por subdefinição de fontes

Use esta abordagem quando quiser reduzir a carga da fonte enquanto mantém os dados da fonte incorporada alinhados com o uso do documento.

  1. Abra o PDF de origem em um objeto Document.
  2. Execute a subdefinição de fontes através dos utilitários 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 for 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 ao abrir o documento

Use este exemplo para inspecionar 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");
        }
    }
}