package jnpf.bizcommon.onlyoffice.service.impl; import jnpf.bizcommon.onlyoffice.entity.OnlyOfficeProperties; import jnpf.exception.DataException; import org.apache.pdfbox.Loader; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.junit.Test; import java.io.ByteArrayOutputStream; import java.util.List; import static org.junit.Assert.assertEquals; public class OnlyOfficeDmsPrintPdfMergerTest { @Test public void mergesCopiesInRequestOrder() throws Exception { OnlyOfficeProperties properties = new OnlyOfficeProperties(); byte[] merged = new OnlyOfficeDmsPrintPdfMerger(properties).merge( List.of(pdf(500), pdf(600))); try (PDDocument document = Loader.loadPDF(merged)) { assertEquals(2, document.getNumberOfPages()); assertEquals(500, document.getPage(0).getMediaBox().getWidth(), 0.01); assertEquals(600, document.getPage(1).getMediaBox().getWidth(), 0.01); } } @Test(expected = DataException.class) public void rejectsMergedPageCountBeyondConfiguredLimit() throws Exception { OnlyOfficeProperties properties = new OnlyOfficeProperties(); properties.getDmsPrint().setMaxPages(1); new OnlyOfficeDmsPrintPdfMerger(properties).merge(List.of(pdf(500), pdf(600))); } private byte[] pdf(float width) throws Exception { try (PDDocument document = new PDDocument(); ByteArrayOutputStream output = new ByteArrayOutputStream()) { document.addPage(new PDPage(new PDRectangle(width, 800))); document.save(output); return output.toByteArray(); } } }