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

THausherr 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 615a0ad97b [TIKA-4891] Add temporary table header retrieval method 
(Mirrors PDFBox bugfix) (#3172)
615a0ad97b is described below

commit 615a0ad97ba67821233a532298d2e01ecda31554
Author: Tilman Hausherr <[email protected]>
AuthorDate: Tue Sep 15 09:33:33 2026 +0200

    [TIKA-4891] Add temporary table header retrieval method (Mirrors PDFBox 
bugfix) (#3172)
    
    * [TIKA-4891] Temporary table header retrieval method (Mirrors PDFBox 
bugfix)
    
    * Remove catching runtime exception
    
    * Add TODO comment for PDFBOX-6261 bugfix
    
    Added a TODO comment regarding PDFBOX-6261 bugfix for future release.
    
    * Add import for COSArray in PDFMarkedContent2XHTML
---
 tika-parent/pom.xml                                |  1 +
 .../tika/parser/pdf/PDFMarkedContent2XHTML.java    | 28 +++++++++++++---------
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/tika-parent/pom.xml b/tika-parent/pom.xml
index 564de33ab9..dce1437c29 100644
--- a/tika-parent/pom.xml
+++ b/tika-parent/pom.xml
@@ -438,6 +438,7 @@
     <osgi.util.version>1.2.0</osgi.util.version>
     <parso.version>2.0.14</parso.version>
     <pax.exam.version>4.14.0</pax.exam.version>
+    <!-- TODO remove PDFBOX-6261 bugfix in PDFMarkedContent2XHTML with 3.0.9 
release -->
     <pdfbox.version>3.0.8</pdfbox.version>
     <poi.version>5.5.1</poi.version>
     <protobuf.version>3.25.9</protobuf.version>
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/PDFMarkedContent2XHTML.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/PDFMarkedContent2XHTML.java
index 1271fd5d1e..ff2da9adf7 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/PDFMarkedContent2XHTML.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/PDFMarkedContent2XHTML.java
@@ -32,6 +32,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.regex.Pattern;
 
+import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
@@ -1467,20 +1468,11 @@ public class PDFMarkedContent2XHTML extends PDF2XHTML {
             chain.add(n);
         }
         for (int i = chain.size() - 1; i >= 0; i--) {
-            chain.get(i).spec = buildSpec(chain.get(i));
+            chain.get(i).spec = buildSpec(chain.get(i), new AttributesImpl());
         }
         return node.spec;
     }
 
-    private ElementSpec buildSpec(StructureIndex.Node node) {
-        try {
-            return buildSpec(node, new AttributesImpl());
-        } catch (RuntimeException e) {
-            // PDFBox's attribute model casts what it finds (PDFBOX: /Headers 
holding strings)
-            return buildSpec(node, null);
-        }
-    }
-
     private ElementSpec buildSpec(StructureIndex.Node node, AttributesImpl 
attrs) {
         ElementSpec spec = mapType(node, attrs);
         if (spec.tag == null) {
@@ -1687,7 +1679,7 @@ public class PDFMarkedContent2XHTML extends PDF2XHTML {
             if (table.getColSpan() > 1) {
                 addAttribute(attrs, "colspan", 
Integer.toString(table.getColSpan()));
             }
-            String[] headers = table.getHeaders();
+            String[] headers = getTableHeaders(table); //TODO 
table.getHeaders() with 3.0.9 release
             if (headers != null && headers.length > 0) {
                 addAttribute(attrs, "headers", String.join(" ", headers));
             }
@@ -1697,6 +1689,20 @@ public class PDFMarkedContent2XHTML extends PDF2XHTML {
         }
     }
 
+    //TODO remove this with 3.0.9 release (PDFBOX-6261)
+    private static String[] getTableHeaders(PDTableAttributeObject table) {
+        COSBase v = table.getCOSObject().getDictionaryObject("Headers");
+        if (v instanceof COSArray) {
+            COSArray array = (COSArray) v;
+            String[] strings = new String[array.size()];
+            for (int i = 0; i < array.size(); i++) {
+                strings[i] = array.getString(i);
+            }
+            return strings;
+        }
+        return null;
+    }
+
     private static void addAttribute(AttributesImpl attrs, String name, String 
value) {
         if (value == null || value.isBlank() || attrs.getIndex("", name) >= 0) 
{
             return;

Reply via email to