package de.superx.servlet; import java.awt.image.RenderedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDResources; import org.apache.pdfbox.pdmodel.graphics.PDXObject; import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.test.context.ContextConfiguration; import de.superx.BaseDbTest; import de.superx.TestApplicationConfigPg; import de.superx.bin.ExecuteMask; import de.superx.sec.InputCheckRegistry; //@ContextConfiguration(classes = { TestApplicationConfigPg.class }) public class ExecuteMaskPDFTest extends BaseDbTest { private static String outputFilename; private static File outputFile; @BeforeClass public static void setup() { outputFilename=String.join(File.separator, "test", "output_16000.pdf"); InputCheckRegistry.registerDefaultChecks(); if (outputFilename != null) { outputFile = new File(outputFilename); if (outputFile.exists()) { outputFile.delete(); } } } @Test public void testPDF() throws Exception { String[] params = { "-tid:16000", "-out:" + outputFilename, "-user:admin", "-params:Köpfe oder Fälle ?=KoF_2&Stichtag=1&stylesheet=tabelle_fo_pdf.xsl&contenttype=application/pdf", "-logger:" + logConfigPath, "-fopxconf:"+SuperXManager.getWEB_INFPfad()+File.separator+"conf/fop.xconf" }; ExecuteMask.setMandantenID(MANDANTEN_ID); ExecuteMask.setMyWEBINFFilePath(SuperXManager.getWEB_INFPfad()); ExecuteMask.execute(params); validatePDFFile(); } private static void validatePDFFile() throws IOException { Assert.assertTrue("'" + outputFilename + " does not exist", outputFile.exists()); Assert.assertTrue("'" + outputFilename + " 0 Bytes", outputFile.length()>0); PDDocument document =PDDocument.load(outputFile); List images = new ArrayList<>(); for (PDPage page : document.getPages()) { images.addAll(getImagesFromResources(page.getResources())); } document.close(); Assert.assertTrue("'" + outputFilename + " scheint kein Logo zu enthalten", images.size()>0); } private static List getImagesFromResources(PDResources resources) throws IOException { List images = new ArrayList<>(); for (COSName xObjectName : resources.getXObjectNames()) { PDXObject xObject = resources.getXObject(xObjectName); if (xObject instanceof PDFormXObject) { images.addAll(getImagesFromResources(((PDFormXObject) xObject).getResources())); } else if (xObject instanceof PDImageXObject) { images.add(((PDImageXObject) xObject).getImage()); } } return images; } }