SuperX-Kernmodul
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

91 lines
3.0 KiB

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<RenderedImage> 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<RenderedImage> getImagesFromResources(PDResources resources) throws IOException {
List<RenderedImage> 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;
}
}