Não é possível ler o texto exato destacado nas linhas

Eu estou trabalhando na leitura do documento PDF destacado usando o PDBox. Consegui ler o texto destacado em uma única linha, palavras simples e múltiplas. No entanto, não consegui ler o texto destacado nas linhas. Por favor, encontre o seguinte código de exemplo para ler o texto destacado.

 PDDocument pddDocument = PDDocument.load(new File("C:\\pdf-sample.pdf")); List allPages = pddDocument.getDocumentCatalog().getAllPages(); for (int i = 0; i < allPages.size(); i++) { int pageNum = i + 1; PDPage page = (PDPage) allPages.get(i); List la = page.getAnnotations(); if (la.size() < 1) { continue; } System.out.println("Page number : "+pageNum); for (PDAnnotation pdfAnnot: la) { if (pdfAnnot.getSubtype().equals("Popup")) { continue; } PDFTextStripperByArea stripper = new PDFTextStripperByArea(); stripper.setSortByPosition(true); PDRectangle rect = pdfAnnot.getRectangle(); float x = rect.getLowerLeftX() - 1; float y = rect.getUpperRightY() - 1; float width = rect.getWidth(); float height = rect.getHeight() + rect.getHeight() / 4; int rotation = page.findRotation(); if (rotation == 0) { PDRectangle pageSize = page.getMediaBox(); y = pageSize.getHeight() - y; } Rectangle2D.Float awtRect = new Rectangle2D.Float(x, y, width, height); stripper.addRegion(Integer.toString(0), awtRect); stripper.extractRegions(page); System.out.println("------------------------------------------------------------------"); System.out.println("Annot type = " + pdfAnnot.getSubtype()); System.out.println("Getting text from region = " + stripper.getTextForRegion(Integer.toString(0)) + "\n"); System.out.println("Getting text from comment = " + pdfAnnot.getContents()); } } 

Ao ler o texto destacado nas linhas, a function “pdfAnnot.getRectangle ()” retorna a área mínima do retângulo ao redor do texto. Isso dá mais texto do que o necessário. Não encontrei nenhuma API para extrair o texto realçado exato.

Por exemplo: Texto extraído do arquivo PDF de teste.

Qualquer pessoa, em qualquer lugar, pode abrir um arquivo PDF . Tudo que você precisa é o Adobe Acrobat grátis

Leitor . Os destinatários de outros formatos de arquivo às vezes não podem abrir arquivos porque

não tem os aplicativos usados ​​para criar os documentos.

Caso de uso 1: Lendo o primeiro texto em negrito, isto é, PDF . Não há problemas na leitura do texto destacado em uma única linha. O texto correto será impresso conforme listado abaixo:
Saída: Obtendo texto da região = ” PDF

Caso de uso 2: Lendo o segundo texto em negrito, ou seja, o Adobe Acrobat reader , que se estende em duas linhas. Nesse caso, o texto extraído na execução do programa acima é:
Saída: Obtendo texto de region = ” Qualquer pessoa, em qualquer lugar, pode abrir um arquivo PDF. Tudo o que você precisa é do Adobe Acrobat Reader gratuito. Os destinatários de outros formatos de arquivo às vezes não conseguem abrir arquivos porque “.

A API getRectangle () fornece as coordenadas do retângulo mínimo cercadas pelo texto realçado. Por isso, é mais texto do que o “Adobe Acrobat Reader”.

  1. Como saber os pontos inicial e final do destaque na região de extração.
  2. Como saber o número de linhas na região extraída.

Qualquer ajuda será muito apreciada.

Eu consegui extrair o texto realçado usando o seguinte código.

 // PDF32000-2008 // 12.5.2 Annotation Dictionaries // 12.5.6 Annotation Types // 12.5.6.10 Text Markup Annotations @SuppressWarnings({ "unchecked", "unused" }) public ArrayList getHighlightedText(String filePath, int pageNumber) throws IOException { ArrayList highlightedTexts = new ArrayList<>(); // this is the in-memory representation of the PDF document. // this will load a document from a file. PDDocument document = PDDocument.load(filePath); // this represents all pages in a PDF document. List allPages = document.getDocumentCatalog().getAllPages(); // this represents a single page in a PDF document. PDPage page = allPages.get(pageNumber); // get annotation dictionaries List annotations = page.getAnnotations(); for(int i=0; i 1) { str = str.concat(highlightedText); } else { str = highlightedText; } } highlightedTexts.add(str); } } document.close(); return highlightedTexts; } 
Intereting Posts