LOG.trace("minPageIndex: {}", minPageIndex); try (PDDocument document = new PDDocument(Utilities.getMemorySettings(environment.getSwapCacheSize()))) { document.setResourceCache(new ResourceCacheWithLimitedImages(environment)); addImagesToDocument(document, images); final Path tempDir = getTempDir();
public static ImageWithDimension renderPage(final InputStream documentIS, final int page, Environment environment) throws IOException { try (PDDocument pdDocument = PDDocument.load(documentIS, Utilities.getMemorySettings(environment.getDocumentCacheSize()))) { if (page >= pdDocument.getNumberOfPages()) { throw new IllegalArgumentException("Page out of range. Last page is: " + pdDocument.getNumberOfPages()); } pdDocument.setResourceCache(new ResourceCacheWithLimitedImages(environment)); PDFRenderer pdfRenderer = new PDFRenderer(pdDocument); return PdfComparator.renderPageAsImage(pdDocument, pdfRenderer, page); } } }
private void compare(final PDDocument expectedDocument, final PDDocument actualDocument) throws IOException { expectedDocument.setResourceCache(new ResourceCacheWithLimitedImages(environment)); PDFRenderer expectedPdfRenderer = new PDFRenderer(expectedDocument); actualDocument.setResourceCache(new ResourceCacheWithLimitedImages(environment)); PDFRenderer actualPdfRenderer = new PDFRenderer(actualDocument); final int minPageCount = Math.min(expectedDocument.getNumberOfPages(), actualDocument.getNumberOfPages()); CountDownLatch latch = new CountDownLatch(minPageCount); for (int pageIndex = 0; pageIndex < minPageCount; pageIndex++) { drawImage(latch, pageIndex, expectedDocument, actualDocument, expectedPdfRenderer, actualPdfRenderer); } Utilities.await(latch, "FullCompare", environment); Utilities.shutdownAndAwaitTermination(drawExecutor, "Draw"); Utilities.shutdownAndAwaitTermination(parrallelDrawExecutor, "Parallel Draw"); Utilities.shutdownAndAwaitTermination(diffExecutor, "Diff"); if (expectedDocument.getNumberOfPages() > minPageCount) { addExtraPages(expectedDocument, expectedPdfRenderer, minPageCount, MISSING_RGB, true); } else if (actualDocument.getNumberOfPages() > minPageCount) { addExtraPages(actualDocument, actualPdfRenderer, minPageCount, EXTRA_RGB, false); } }
@Override public Component preview(final byte[] uploadedBytes) { firstPage = null; try (InputStream bais = new ByteArrayInputStream(uploadedBytes); PDDocument document = PDDocument.load(bais, MemoryUsageSetting.setupTempFileOnly())) { document.setResourceCache(new DefaultResourceCache() { @Override public void put(final COSObject indirect, final PDXObject xobject) throws IOException { } }); if (document.isEncrypted()) { LOG.info("Document is encrypted, no preview is possible"); } else { firstPage = new PDFRenderer(document).renderImageWithDPI(0, DPI, IMAGE_TYPE); } } catch (IOException e) { LOG.error("While generating thumbnail from first page", e); } Fragment fragment; if (firstPage == null) { fragment = new Fragment("preview", "noPreviewFragment", this); } else { fragment = new Fragment("preview", "previewFragment", this); fragment.add(new NonCachingImage("previewImage", new ThumbnailImageResource(firstPage))); } WebMarkupContainer previewContainer = new WebMarkupContainer("previewContainer"); previewContainer.setOutputMarkupId(true); previewContainer.add(fragment); return this.addOrReplace(previewContainer); }