use of org.estatio.module.capex.platform.pdfmanipulator.ExtractSpec in project estatio by estatio.
the class DocumentPreparer method stampUsing.
DocumentPreparer stampUsing(final PdfManipulator pdfManipulator) {
try {
final String documentName = document.getName();
final List<String> leftLineTexts = Lists.newArrayList();
leftLineTexts.add(documentName);
if (transitionIfAny != null) {
final String completedBy = transitionIfAny.getCompletedBy();
leftLineTexts.add(String.format("approved by: %s", completedBy != null ? completedBy : "(unknown)"));
leftLineTexts.add("approved on: " + transitionIfAny.getCompletedOn().toString("dd-MMM-yyyy HH:mm"));
} else {
leftLineTexts.add("not yet approved");
}
final List<String> rightLineTexts = Lists.newArrayList();
rightLineTexts.add(String.format("net Amt : %s", new DecimalFormat("0.00").format(incomingInvoice.getNetAmount())));
rightLineTexts.add(String.format("gross Amt : %s", new DecimalFormat("0.00").format(incomingInvoice.getGrossAmount())));
final String hyperlink = null;
byte[] bytes = pdfManipulator.extractAndStamp(document.getBlobBytes(), new ExtractSpec(numFirstPages, numLastPages), new Stamp(leftLineTexts, rightLineTexts, hyperlink));
tempFile = File.createTempFile(documentName, "pdf");
final FileOutputStream fos = new FileOutputStream(tempFile);
fos.write(bytes);
fos.close();
return this;
} catch (IOException e) {
throw new IncomingInvoiceDownloadManager.DownloadException("Failed to prepare: " + document.getName(), e);
}
}
use of org.estatio.module.capex.platform.pdfmanipulator.ExtractSpec in project estatio by estatio.
the class PaymentBatch method downloadReviewPdf.
@Action(semantics = SemanticsOf.SAFE)
@ActionLayout(contributed = Contributed.AS_ACTION)
public Blob downloadReviewPdf(final String documentName, @ParameterLayout(named = "How many first pages of each invoice's PDF?") final Integer numFirstPages, @ParameterLayout(named = "How many final pages of each invoice's PDF?") final Integer numLastPages) throws IOException {
final List<File> pdfFiles = Lists.newArrayList();
final List<CreditTransfer> transfers = this.getTransfers();
for (CreditTransfer transfer : transfers) {
final List<PaymentLine> lines = transfer.getLines();
for (final PaymentLine line : lines) {
final IncomingInvoice invoice = line.getInvoice();
final BankAccount bankAccount = invoice.getBankAccount();
final Optional<org.incode.module.document.dom.impl.docs.Document> invoiceDocIfAny = lookupAttachedPdfService.lookupIncomingInvoicePdfFrom(invoice);
if (invoiceDocIfAny.isPresent()) {
final org.incode.module.document.dom.impl.docs.Document invoiceDoc = invoiceDocIfAny.get();
final byte[] invoiceDocBytes = invoiceDoc.asBytes();
final Optional<org.incode.module.document.dom.impl.docs.Document> ibanProofDocIfAny = lookupAttachedPdfService.lookupIbanProofPdfFrom(bankAccount);
List<String> leftLines = Lists.newArrayList();
leftLines.add("xfer id: " + transfer.getEndToEndId() + " / " + line.getSequence());
for (IncomingInvoice.ApprovalString approvalString : invoice.getApprovals()) {
leftLines.add(String.format("approved by: %s", approvalString.getCompletedBy()));
leftLines.add("on: " + approvalString.getCompletedOn());
}
final List<String> rightLines = Lists.newArrayList();
rightLines.add(String.format("debtor IBAN: %s", line.getBatch().getDebtorBankAccount().getIban()));
rightLines.add(String.format("crdtor IBAN: %s", line.getCreditorBankAccount().getIban()));
rightLines.add(String.format("gross Amt : %s", new DecimalFormat("0.00").format(line.getAmount())));
boolean attachProof = false;
final String proof;
if (ibanProofDocIfAny.isPresent()) {
final org.incode.module.document.dom.impl.docs.Document ibanProofDoc = ibanProofDocIfAny.get();
if (DocumentTypeData.IBAN_PROOF.isDocTypeFor(ibanProofDoc)) {
proof = "Separate IBAN proof (next page)";
attachProof = true;
} else {
proof = "Invoice used as IBAN proof";
}
} else {
proof = "No IBAN proof";
}
rightLines.add(proof);
URI uri = deepLinkService.deepLinkFor(invoice);
final Stamp stamp = new Stamp(leftLines, rightLines, uri.toString());
final byte[] extractedInvoiceDocBytes = pdfManipulator.extractAndStamp(invoiceDocBytes, new ExtractSpec(numFirstPages, numLastPages), stamp);
appendTempFile(extractedInvoiceDocBytes, documentName, pdfFiles);
if (attachProof) {
final org.incode.module.document.dom.impl.docs.Document ibanProofDoc = ibanProofDocIfAny.get();
final byte[] ibanProofBytes = ibanProofDoc.asBytes();
final byte[] firstPageIbanProofDocBytes = pdfManipulator.extract(ibanProofBytes, ExtractSpec.FIRST_PAGE_ONLY);
appendTempFile(firstPageIbanProofDocBytes, documentName, pdfFiles);
}
}
}
}
byte[] pdfMergedBytes = pdfBoxService.merge(pdfFiles);
pdfFiles.stream().forEach(this::cleanup);
return new Blob(documentName, DocumentConstants.MIME_TYPE_APPLICATION_PDF, pdfMergedBytes);
}
Aggregations