Skip to content

Commit b6729d5

Browse files
authored
UFAL/Bump tika.version from 3.2.2 to 3.2.3 (#1235)
1 parent d721e46 commit b6729d5

6 files changed

Lines changed: 36 additions & 23 deletions

File tree

dspace-api/src/main/java/org/dspace/app/mediafilter/ImageMagickThumbnailFilter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import java.util.regex.Pattern;
1515
import java.util.regex.PatternSyntaxException;
1616

17-
import org.apache.pdfbox.pdmodel.PDDocument;
17+
import org.apache.pdfbox.Loader;
1818
import org.apache.pdfbox.pdmodel.PDPage;
1919
import org.apache.pdfbox.pdmodel.common.PDRectangle;
2020
import org.dspace.content.Bitstream;
@@ -153,8 +153,8 @@ public File getImageFile(File f, boolean verbose)
153153
// the CropBox is missing or empty because pdfbox will set it to the
154154
// same size as the MediaBox if it doesn't exist. Also note that we
155155
// only need to check the first page, since that's what we use for
156-
// generating the thumbnail (PDDocument uses a zero-based index).
157-
PDPage pdfPage = PDDocument.load(f).getPage(0);
156+
// generating the thumbnail (PDPage uses a zero-based index).
157+
PDPage pdfPage = Loader.loadPDF(f).getPage(0);
158158
PDRectangle pdfPageMediaBox = pdfPage.getMediaBox();
159159
PDRectangle pdfPageCropBox = pdfPage.getCropBox();
160160

dspace-api/src/main/java/org/dspace/app/mediafilter/PDFBoxThumbnail.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import java.io.InputStream;
1212

1313
import org.apache.logging.log4j.Logger;
14+
import org.apache.pdfbox.Loader;
15+
import org.apache.pdfbox.io.RandomAccessReadBuffer;
1416
import org.apache.pdfbox.pdmodel.PDDocument;
1517
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
1618
import org.apache.pdfbox.rendering.PDFRenderer;
@@ -71,7 +73,7 @@ public InputStream getDestinationStream(Item currentItem, InputStream source, bo
7173
BufferedImage buf;
7274

7375
// Render the page image.
74-
try ( PDDocument doc = PDDocument.load(source); ) {
76+
try ( PDDocument doc = Loader.loadPDF(new RandomAccessReadBuffer(source)); ) {
7577
PDFRenderer renderer = new PDFRenderer(doc);
7678
buf = renderer.renderImage(0);
7779
} catch (InvalidPasswordException ex) {

dspace-api/src/main/java/org/dspace/content/packager/PDFPackager.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818

1919
import org.apache.commons.lang3.ArrayUtils;
2020
import org.apache.logging.log4j.Logger;
21+
import org.apache.pdfbox.Loader;
2122
import org.apache.pdfbox.cos.COSDocument;
2223
import org.apache.pdfbox.io.MemoryUsageSetting;
23-
import org.apache.pdfbox.io.RandomAccessBufferedFileInputStream;
24+
import org.apache.pdfbox.io.RandomAccessReadBuffer;
2425
import org.apache.pdfbox.io.ScratchFile;
25-
import org.apache.pdfbox.pdfparser.PDFParser;
2626
import org.apache.pdfbox.pdmodel.PDDocument;
2727
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
2828
import org.dspace.authorize.AuthorizeException;
@@ -330,19 +330,24 @@ private void crosswalkPDF(Context context, Item item, InputStream metadata)
330330
COSDocument cos = null;
331331

332332
try {
333-
ScratchFile scratchFile = null;
333+
PDDocument document = null;
334+
334335
try {
335-
long useRAM = Runtime.getRuntime().freeMemory() * 80 / 100; // use up to 80% of JVM free memory
336-
scratchFile = new ScratchFile(
337-
MemoryUsageSetting.setupMixed(useRAM)); // then fallback to temp file (unlimited size)
336+
// Use up to 80% of JVM free memory and fall back to a temp file (unlimited size)
337+
long useRAM = Runtime.getRuntime().freeMemory() * 80 / 100;
338+
document = Loader.loadPDF(
339+
new RandomAccessReadBuffer(metadata),
340+
() -> new ScratchFile(MemoryUsageSetting.setupMixed(useRAM)));
338341
} catch (IOException ioe) {
339342
log.warn("Error initializing scratch file: " + ioe.getMessage());
340343
}
341344

342-
PDFParser parser = new PDFParser(new RandomAccessBufferedFileInputStream(metadata), scratchFile);
343-
parser.parse();
344-
cos = parser.getDocument();
345+
// sanity check: loaded PDF document must not be null.
346+
if (document == null) {
347+
throw new MetadataValidationException("The provided stream could not be parsed into a PDF document.");
348+
}
345349

350+
cos = document.getDocument();
346351
// sanity check: PDFBox breaks on encrypted documents, so give up.
347352
if (cos.getEncryptionDictionary() != null) {
348353
throw new MetadataValidationException("This packager cannot accept an encrypted PDF document.");

dspace-api/src/main/java/org/dspace/disseminate/CitationDocumentServiceImpl.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,16 @@
2323
import org.apache.commons.lang3.tuple.Pair;
2424
import org.apache.logging.log4j.LogManager;
2525
import org.apache.logging.log4j.Logger;
26+
import org.apache.pdfbox.Loader;
27+
import org.apache.pdfbox.io.RandomAccessReadBuffer;
2628
import org.apache.pdfbox.pdmodel.PDDocument;
2729
import org.apache.pdfbox.pdmodel.PDPage;
2830
import org.apache.pdfbox.pdmodel.PDPageContentStream;
2931
import org.apache.pdfbox.pdmodel.PDPageTree;
3032
import org.apache.pdfbox.pdmodel.common.PDRectangle;
3133
import org.apache.pdfbox.pdmodel.font.PDFont;
3234
import org.apache.pdfbox.pdmodel.font.PDType1Font;
35+
import org.apache.pdfbox.pdmodel.font.Standard14Fonts;
3336
import org.dspace.authorize.AuthorizeException;
3437
import org.dspace.authorize.service.AuthorizeService;
3538
import org.dspace.content.Bitstream;
@@ -304,7 +307,7 @@ public Pair<byte[], Long> makeCitedDocument(Context context, Bitstream bitstream
304307
Item item = (Item) bitstreamService.getParentObject(context, bitstream);
305308
final InputStream inputStream = bitstreamService.retrieve(context, bitstream);
306309
try {
307-
sourceDocument = sourceDocument.load(inputStream);
310+
sourceDocument = Loader.loadPDF(new RandomAccessReadBuffer(inputStream));
308311
} finally {
309312
inputStream.close();
310313
}
@@ -335,9 +338,10 @@ protected void generateCoverPage(Context context, PDDocument document, PDPage co
335338
int xwidth = 550;
336339
int ygap = 20;
337340

338-
PDFont fontHelvetica = PDType1Font.HELVETICA;
339-
PDFont fontHelveticaBold = PDType1Font.HELVETICA_BOLD;
340-
PDFont fontHelveticaOblique = PDType1Font.HELVETICA_OBLIQUE;
341+
PDFont fontHelvetica = new PDType1Font(Standard14Fonts.FontName.HELVETICA);
342+
PDFont fontHelveticaBold = new PDType1Font(Standard14Fonts.FontName.HELVETICA_BOLD);
343+
PDFont fontHelveticaOblique = new PDType1Font(Standard14Fonts.FontName.HELVETICA_OBLIQUE);
344+
341345
contentStream.setNonStrokingColor(Color.BLACK);
342346

343347
String[][] content = {header1};

dspace-server-webapp/src/test/java/org/dspace/app/rest/BitstreamRestControllerIT.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
import org.apache.commons.io.IOUtils;
6363
import org.apache.commons.lang3.CharEncoding;
6464
import org.apache.commons.lang3.StringUtils;
65+
import org.apache.pdfbox.Loader;
66+
import org.apache.pdfbox.io.RandomAccessReadBuffer;
6567
import org.apache.pdfbox.pdmodel.PDDocument;
6668
import org.apache.pdfbox.text.PDFTextStripper;
6769
import org.apache.solr.client.solrj.SolrServerException;
@@ -1004,7 +1006,7 @@ private String extractPDFText(byte[] content) throws IOException {
10041006

10051007
try (ByteArrayInputStream source = new ByteArrayInputStream(content);
10061008
Writer writer = new StringWriter();
1007-
PDDocument pdfDoc = PDDocument.load(source)) {
1009+
PDDocument pdfDoc = Loader.loadPDF(new RandomAccessReadBuffer(source))) {
10081010

10091011
pts.writeText(pdfDoc, writer);
10101012
return writer.toString();
@@ -1013,7 +1015,7 @@ private String extractPDFText(byte[] content) throws IOException {
10131015

10141016
private int getNumberOfPdfPages(byte[] content) throws IOException {
10151017
try (ByteArrayInputStream source = new ByteArrayInputStream(content);
1016-
PDDocument pdfDoc = PDDocument.load(source)) {
1018+
PDDocument pdfDoc = Loader.loadPDF(new RandomAccessReadBuffer(source))) {
10171019
return pdfDoc.getNumberOfPages();
10181020
}
10191021
}

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@
3737
<jaxb-runtime.version>2.3.9</jaxb-runtime.version>
3838
<jcache-version>1.1.1</jcache-version>
3939
<!-- NOTE: Jetty needed for Solr, Handle Server & tests -->
40-
<jetty.version>9.4.57.v20241219</jetty.version>
41-
<log4j.version>2.25.1</log4j.version>
42-
<pdfbox-version>2.0.34</pdfbox-version>
40+
<jetty.version>9.4.58.v20250814</jetty.version>
41+
<log4j.version>2.25.2</log4j.version>
42+
<pdfbox-version>3.0.5</pdfbox-version>
4343
<rome.version>1.19.0</rome.version>
4444
<slf4j.version>1.7.36</slf4j.version>
45-
<tika.version>2.9.4</tika.version>
45+
<tika.version>3.2.3</tika.version>
4646
<!-- Sync with whatever version Tika uses -->
4747
<bouncycastle.version>1.81</bouncycastle.version>
4848

0 commit comments

Comments
 (0)