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;