/* * Copyright (C) 2014 Armin Häberling * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/> */ package com.aha.pdftools.transform; import static com.aha.pdftools.IsPdfNumber.isPdfNumber; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.lessThan; import static org.junit.Assert.assertThat; import java.io.ByteArrayOutputStream; import org.junit.Before; import org.junit.Test; import com.aha.pdftools.PdfReaderTestBase; import com.itextpdf.text.pdf.PRStream; import com.itextpdf.text.pdf.PdfName; import com.itextpdf.text.pdf.PdfObject; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; public class ShrinkImagesTest extends PdfReaderTestBase { private ShrinkImages transformation; @Before public void setup() throws Exception { transformation = new ShrinkImages(); } @Test public void reducedPdfSize() throws Exception { PdfReader reader = setupReader(EXAMPLE_PDF_WITH_PNG_IMAGE); transformation.setScaleFactor(0.5); transformation.transform(reader); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); PdfStamper stamper = new PdfStamper(reader, outputStream); stamper.close(); assertThat(outputStream.size(), lessThan(62000)); } @Test public void shrinkPngImage() throws Exception { setupReader(EXAMPLE_PDF_WITH_PNG_IMAGE); PRStream stream = (PRStream) getReader().getPdfObject(15); int originalLength = stream.getLength(); transformation.transform(getReader()); assertThat(stream.getLength(), lessThan(originalLength)); assertThat(stream.getLength(), lessThan(40000)); assertThat(stream.get(PdfName.BITSPERCOMPONENT), isPdfNumber(8)); assertThat(stream.get(PdfName.COLORSPACE), is((PdfObject) PdfName.DEVICERGB)); assertThat(stream.get(PdfName.WIDTH), isPdfNumber(512)); assertThat(stream.get(PdfName.HEIGHT), isPdfNumber(512)); } @Test public void shrinkAndResizePngImage() throws Exception { setupReader(EXAMPLE_PDF_WITH_PNG_IMAGE); PRStream stream = (PRStream) getReader().getPdfObject(15); int originalLength = stream.getLength(); transformation.setScaleFactor(0.5); transformation.transform(getReader()); assertThat(stream.getLength(), lessThan(originalLength)); assertThat(stream.getLength(), lessThan(14000)); assertThat(stream.get(PdfName.BITSPERCOMPONENT), isPdfNumber(8)); assertThat(stream.get(PdfName.COLORSPACE), is((PdfObject) PdfName.DEVICERGB)); assertThat(stream.get(PdfName.WIDTH), isPdfNumber(256)); assertThat(stream.get(PdfName.HEIGHT), isPdfNumber(256)); } }