Converter arquivo HTML para PDF em Java

Visão Geral

Este artigo explica como converter HTML para PDF usando Java. O código é muito simples, basta carregar o HTML na classe Document e salvá-lo como um PDF de saída. Converter MHTML para PDF em Java também é semelhante. Ele abrange os seguintes tópicos:

Biblioteca Java para Conversão de HTML para PDF

Aspose.PDF for Java é uma API de manipulação de PDF que permite converter documentos HTML existentes para PDF de forma contínua. O processo de conversão de HTML para PDF pode ser personalizado de maneira flexível.

Converter HTML para PDF

O exemplo de código Java a seguir mostra como converter um documento HTML para PDF.

  1. Crie uma instância da classe HtmlLoadOptions.
  2. Inicialize o objeto Document.
  3. Salve o documento PDF de saída chamando o método Document.save(String).
// Abra o documento PDF de origem
Document document = new Document(DATA_DIR + "PDFToHTML.pdf")

// Instanciar objeto HTML SaveOptions
HtmlSaveOptions htmlsaveOptions = new HtmlSaveOptions();

// Salve o documento
document.save(DATA_DIR + "MultiPageHTML_out.html", htmlsaveOptions);

Conversão avançada de HTML para PDF

O mecanismo de conversão HTML possui várias opções que nos permitem controlar o processo de conversão.

Suporte a Consultas de Mídia

  1. Crie um LoadOptions HTML.
  2. Defina o modo Print ou Screen.
  3. Inicialize o objeto Document.
  4. Salve o documento PDF de saída.

Consultas de mídia são uma técnica popular para entregar uma folha de estilo personalizada para diferentes dispositivos. Podemos definir o tipo de dispositivo usando a propriedade HtmlMediaType.

// Crie um LoadOptions HTML
HtmlLoadOptions options = new HtmlLoadOptions();

// Defina o modo Print ou Screen
options.setHtmlMediaType(HtmlMediaType.Print);

// Inicialize o objeto documento
String htmlFileName = Paths.get(DATA_DIR.toString(), "test.html").toString();
Document document = new Document(htmlFileName, options);

// Salve o documento PDF de saída
document.save(Paths.get(DATA_DIR.toString(), "HTMLtoPDF.pdf").toString());
document.close();

Ativar (desativar) incorporação de fontes

  1. Adicione novas LoadOptions Html.
  2. Ative/Desative a incorporação de fontes.
  3. Salve um novo Documento.

As páginas HTML frequentemente usam fontes (por exemplo, fontes de pasta local, Google Fonts, etc). Podemos também controlar a incorporação de fontes em um documento usando a propriedade IsEmbedFonts.

HtmlLoadOptions options = new HtmlLoadOptions();
// Ativar/Desativar incorporação de fontes
options.setEmbedFonts(true);

Document document = new Document(DATA_DIR + "test_fonts.html", options);
document.save(DATA_DIR + "html_test.PDF");
document.close();

Gerenciar carregamento de recursos externos

O Motor de Conversão fornece um mecanismo que permite controlar o carregamento de certos recursos associados ao documento HTML.

A classe HtmlLoadOptions possui a propriedade CustomLoaderOfExternalResources com a qual podemos definir o comportamento do carregador de recursos.

HtmlLoadOptions options = new HtmlLoadOptions();

options.setCustomLoaderOfExternalResources(
        new LoadOptions.ResourceLoadingStrategy() {
            public LoadOptions.ResourceLoadingResult invoke(String resourceURI) {
                // Criando recurso de modelo limpo para substituição:
                LoadOptions.ResourceLoadingResult res = new LoadOptions.ResourceLoadingResult(new byte[] {});
                // Retornar array de bytes vazio no caso do servidor i.imgur.com
                if (resourceURI.contains("i.imgur.com")) {
                    return res;
                } else {
                    // Processar recursos com carregador de recursos padrão
                    res.setLoadingCancelled(true);
                    return res;
                }
            }   
});

Document document = new Document(DATA_DIR + "test.html", options);
document.save(DATA_DIR + "html_test.PDF");
document.close();    

Converter MHTML para PDF

MHTML, abreviação de MIME HTML, é um formato de arquivo de arquivo de página da web usado para combinar recursos que geralmente são representados por links externos (como imagens, animações Flash, applets Java e arquivos de áudio) com código HTML em um único arquivo. O conteúdo de um arquivo MHTML é codificado como se fosse uma mensagem de e-mail em HTML, usando o tipo MIME multipart/related.

O próximo trecho de código mostra como converter arquivos MHTML para o formato PDF com Java:

// Crie uma instância de MhtLoadOptions para especificar as opções de carregamento para o
// arquivo MHTML.
MhtLoadOptions options = new MhtLoadOptions();

// Defina o caminho do arquivo MHTML.
String mhtmlFileName = Paths.get(DATA_DIR.toString(), "samplefile.mhtml").toString();

// Carregar o arquivo MHTML em um objeto Document.
Document document = new Document(mhtmlFileName, options);

// Salve o documento como um arquivo PDF.
document.save(Paths.get(DATA_DIR.toString(), "MarkdowntoPDF.pdf").toString());

// Feche o documento.
document.close();