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.
- Crie um novo documento PDF Document.
- Adicione um Page para o documento.
- Crie um TextFragment e adicione-o à página.
- 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.
- Abra o PDF de origem em um objeto Document.
- Crie o
CallBackGetHocrcallback e converta o documento de origem em conteúdo PDF pesquisável. - 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.
- Abra o PDF de origem em um objeto Document.
- Leia as propriedades de janela e exibição necessárias do documento.
- 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.
- Abra o PDF de origem em um objeto Document.
- Defina as preferências de janela, layout e modo de página necessárias.
- 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.
- Abra o PDF de origem em um objeto Document.
- Habilite a incorporação padrão de font e itere pelas fonts usadas por cada Page.
- Marque qualquer não incorporado objetos Font para incorporação.
- 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.
- Crie um novo documento PDF Document e adicione um Page.
- Crie o necessário TextFragment, TextSegment, e TextState.
- Resolva o alvo Font do repositório e marcá-lo como incorporado.
- 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.
- Abra o PDF de origem em um objeto Document.
- Crie PdfSaveOptions e defina o nome da fonte padrão.
- 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.
- Abra o PDF de origem em um objeto Document.
- Enumerar as fontes retornadas pelas utilidades de fontes do documento.
- 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.
- Abra o PDF de origem em um objeto Document.
- Execute a subdefinição de fontes através dos utilitários de fontes do documento com o necessário FontSubsetStrategy valores.
- 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.
- Abra o PDF de origem em um objeto Document.
- Crie um GoToAction com um XYZExplicitDestination.
- 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.
- Abra o PDF de origem em um objeto Document.
- Verifique se a ação de abertura é um GoToAction com um XYZExplicitDestination.
- 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");
}
}
}