blob: 4ec5ba5760f9cda1fc873acfe76dcc13ce635b0a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.pdfbox.benchmark;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.TimeUnit;
import javax.imageio.ImageIO;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.infra.Blackhole;
public class Rendering {
static final String ALTONA_TEST_SUITE = "target/pdfs/eci_altona-test-suite-v2_technical2_x4.pdf";
static final String GHENT_CMYK_X4 = "target/pdfs/Ghent_PDF_Output_Suite_V50_Full/Categories/1-CMYK/Test pages/Ghent_PDF-Output-Test-V50_CMYK_X4.pdf";
static final String PDF32000_2008 = "target/pdfs/PDF32000_2008.pdf";
static final String RENDER_OUTPUT_DIR = "target/renditions";
static {
Configurator.setAllLevels(LogManager.getRootLogger().getName(), Level.OFF);
java.util.logging.Logger.getLogger("org.apache").setLevel(java.util.logging.Level.OFF);
Path path = Paths.get(RENDER_OUTPUT_DIR);
try {
Files.createDirectories(path);
} catch (IOException e) {
// this shouldn't fail and if it does as the
// test should be run manually don't care atm
}
}
@Benchmark
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@BenchmarkMode(Mode.AverageTime)
public void renderGhentCMYKNoOutput(Blackhole blackhole) throws IOException {
try (PDDocument pdf = Loader.loadPDF(new File(GHENT_CMYK_X4)))
{
PDFRenderer renderer = new PDFRenderer(pdf);
int numPages = pdf.getNumberOfPages();
for (int i = 0; i< numPages; i++)
{
blackhole.consume(renderer.renderImageWithDPI(i, 600));
}
}
}
@Benchmark
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@BenchmarkMode(Mode.AverageTime)
public void renderGhentCMYK(Blackhole blackhole) throws IOException {
try (PDDocument pdf = Loader.loadPDF(new File(GHENT_CMYK_X4)))
{
PDFRenderer renderer = new PDFRenderer(pdf);
int numPages = pdf.getNumberOfPages();
for (int i = 0; i< numPages; i++)
{
BufferedImage bi = renderer.renderImageWithDPI(i, 600);
ImageIO.write(bi, "PNG", new File(RENDER_OUTPUT_DIR, "ghent-" + i + ".png"));
}
}
}
@Benchmark
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@BenchmarkMode(Mode.AverageTime)
public void renderAltonaNoOutput(Blackhole blackhole) throws IOException {
try (PDDocument pdf = Loader.loadPDF(new File(ALTONA_TEST_SUITE)))
{
PDFRenderer renderer = new PDFRenderer(pdf);
int numPages = pdf.getNumberOfPages();
for (int i = 0; i< numPages; i++)
{
blackhole.consume(renderer.renderImageWithDPI(i, 600));
}
}
}
@Benchmark
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@BenchmarkMode(Mode.AverageTime)
public void renderAltona(Blackhole blackhole) throws IOException {
try (PDDocument pdf = Loader.loadPDF(new File(ALTONA_TEST_SUITE)))
{
PDFRenderer renderer = new PDFRenderer(pdf);
int numPages = pdf.getNumberOfPages();
for (int i = 0; i< numPages; i++)
{
BufferedImage bi = renderer.renderImageWithDPI(i, 600);
ImageIO.write(bi, "PNG", new File(RENDER_OUTPUT_DIR, "altona-" + i + ".png"));
}
}
}
@Benchmark
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@BenchmarkMode(Mode.AverageTime)
public void renderPDFSpecNoOutput(Blackhole blackhole) throws IOException {
try (PDDocument pdf = Loader.loadPDF(new File(PDF32000_2008)))
{
PDFRenderer renderer = new PDFRenderer(pdf);
int numPages = pdf.getNumberOfPages();
for (int i = 0; i< numPages; i++)
{
blackhole.consume(renderer.renderImageWithDPI(i, 150));
}
}
}
@Benchmark
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@BenchmarkMode(Mode.AverageTime)
public void renderPDFSpec(Blackhole blackhole) throws IOException {
try (PDDocument pdf = Loader.loadPDF(new File(PDF32000_2008)))
{
PDFRenderer renderer = new PDFRenderer(pdf);
int numPages = pdf.getNumberOfPages();
for (int i = 0; i< numPages; i++)
{
BufferedImage bi = renderer.renderImageWithDPI(i, 150);
ImageIO.write(bi, "PNG", new BufferedOutputStream(new FileOutputStream(new File (RENDER_OUTPUT_DIR, "pdf32000_2008-" + i + ".png"))));
}
}
}
}