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();