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
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; |
|
} |
|
}
|
|
|