You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2022/10/13 18:52:55 UTC

[tika] branch main updated: TIKA-3875 -- Add metadata items for "broken" fonts and non-embedded fonts for PDF

This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/main by this push:
     new 3fcda6da8 TIKA-3875 -- Add metadata items for "broken" fonts and non-embedded fonts for PDF
3fcda6da8 is described below

commit 3fcda6da8155028ae915951cf448e40c0df2e348
Author: tballison <ta...@apache.org>
AuthorDate: Thu Oct 13 14:52:46 2022 -0400

    TIKA-3875 -- Add metadata items for "broken" fonts and non-embedded fonts for PDF
---
 .../src/main/java/org/apache/tika/metadata/PDF.java     | 12 ++++++++++++
 .../org/apache/tika/parser/pdf/AbstractPDF2XHTML.java   | 17 ++++++++++++++++-
 .../java/org/apache/tika/parser/pdf/PDFParserTest.java  |  2 ++
 3 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/tika-core/src/main/java/org/apache/tika/metadata/PDF.java b/tika-core/src/main/java/org/apache/tika/metadata/PDF.java
index a26ad4ea8..bdecb3a9b 100644
--- a/tika-core/src/main/java/org/apache/tika/metadata/PDF.java
+++ b/tika-core/src/main/java/org/apache/tika/metadata/PDF.java
@@ -96,6 +96,18 @@ public interface PDF {
     Property OVERALL_PERCENTAGE_UNMAPPED_UNICODE_CHARS =
             Property.internalReal(PDF_PREFIX + "overallPercentageUnmappedUnicodeChars");
 
+    /**
+     * Contains at least one damaged font for at least one character
+     */
+    Property CONTAINS_DAMAGED_FONT =
+            Property.internalBoolean(PDF_PREFIX + "containsDamagedFont");
+
+    /**
+     * Contains at least one font that is not embedded
+     */
+    Property CONTAINS_NON_EMBEDDED_FONT =
+            Property.internalBoolean(PDF_PREFIX + "containsNonEmbeddedFont");
+
     /**
      * Has XFA
      */
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java
index b323dd5de..bd9b99c6c 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java
@@ -175,6 +175,12 @@ class AbstractPDF2XHTML extends PDFTextStripper {
     int totalUnmappedUnicodeCharacters;
     int totalCharacters;
 
+    //contains at least one font that is not embedded
+    boolean containsNonEmbeddedFont = false;
+
+    //contains at least one broken font
+    boolean containsDamagedFont = false;
+
     AbstractPDF2XHTML(PDDocument pdDocument, ContentHandler handler, ParseContext context,
                       Metadata metadata, PDFParserConfig config) throws IOException {
         this.pdDocument = pdDocument;
@@ -964,8 +970,10 @@ class AbstractPDF2XHTML extends PDFTextStripper {
         metadata.set(PDF.TOTAL_UNMAPPED_UNICODE_CHARS, totalUnmappedUnicodeCharacters);
         if (totalCharacters > 0) {
             metadata.set(PDF.OVERALL_PERCENTAGE_UNMAPPED_UNICODE_CHARS,
-                    (float)totalUnmappedUnicodeCharacters/(float)totalCharacters);
+                    (float)totalUnmappedUnicodeCharacters / (float)totalCharacters);
         }
+        metadata.set(PDF.CONTAINS_DAMAGED_FONT, containsDamagedFont);
+        metadata.set(PDF.CONTAINS_NON_EMBEDDED_FONT, containsNonEmbeddedFont);
     }
 
     void extractBookmarkText() throws SAXException, IOException, TikaException {
@@ -1263,6 +1271,13 @@ class AbstractPDF2XHTML extends PDFTextStripper {
         }
         totalCharsPerPage++;
         totalCharacters++;
+
+        if (font.isDamaged()) {
+            containsDamagedFont = true;
+        }
+        if (! font.isEmbedded()) {
+            containsNonEmbeddedFont = true;
+        }
     }
 
     enum ActionTrigger {
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/test/java/org/apache/tika/parser/pdf/PDFParserTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/test/java/org/apache/tika/parser/pdf/PDFParserTest.java
index ffcd76c33..f05c222f8 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/test/java/org/apache/tika/parser/pdf/PDFParserTest.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/test/java/org/apache/tika/parser/pdf/PDFParserTest.java
@@ -1240,6 +1240,8 @@ public class PDFParserTest extends TikaTest {
             assertEquals(120, unmappedUnicodeChars[15]);
             assertEquals(126, totalUnmappedChars);
             assertEquals(0.00146, overallPercentage, 0.0001f);
+            assertTrue(Boolean.parseBoolean(m.get(PDF.CONTAINS_NON_EMBEDDED_FONT)));
+            assertFalse(Boolean.parseBoolean(m.get(PDF.CONTAINS_DAMAGED_FONT)));
         }
         //confirm all works with angles
         PDFParserConfig pdfParserConfig = new PDFParserConfig();