package co.smartreceipts.android.workers.reports.pdf.pdfbox;
import android.support.annotation.NonNull;
import com.google.common.base.Preconditions;
import com.tom_roush.pdfbox.pdmodel.PDDocument;
import java.io.IOException;
import java.util.List;
import co.smartreceipts.android.filters.LegacyReceiptFilter;
import co.smartreceipts.android.model.Receipt;
import co.smartreceipts.android.model.Trip;
import co.smartreceipts.android.settings.UserPreferenceManager;
import co.smartreceipts.android.utils.log.Logger;
import co.smartreceipts.android.workers.reports.pdf.renderer.Renderer;
import co.smartreceipts.android.workers.reports.pdf.renderer.impl.PdfGridGenerator;
public class PdfBoxReceiptsImagesPdfSection extends PdfBoxSection {
private final PDDocument pdDocument;
private final UserPreferenceManager userPreferenceManager;
private final List<Receipt> receipts;
public PdfBoxReceiptsImagesPdfSection(@NonNull PdfBoxContext context, @NonNull PDDocument pdDocument,
@NonNull Trip trip, @NonNull List<Receipt> receipts) {
super(context, trip);
this.pdDocument = Preconditions.checkNotNull(pdDocument);
this.userPreferenceManager = Preconditions.checkNotNull(context.getPreferences());
this.receipts = Preconditions.checkNotNull(receipts);
}
@Override
public void writeSection(@NonNull PDDocument doc, @NonNull PdfBoxWriter writer) throws IOException {
DefaultPdfBoxPageDecorations pageDecorations = new DefaultPdfBoxPageDecorations(pdfBoxContext, trip);
float availableWidth = pdfBoxContext.getPageSize().getWidth() - 2 * pdfBoxContext.getPageMarginHorizontal();
float availableHeight = pdfBoxContext.getPageSize().getHeight() - 2 * pdfBoxContext.getPageMarginVertical()
- pageDecorations.getHeaderHeight() - pageDecorations.getFooterHeight();
final PdfGridGenerator gridGenerator = new PdfGridGenerator(pdfBoxContext, pdDocument, new LegacyReceiptFilter(userPreferenceManager),
pageDecorations, availableWidth, availableHeight);
final List<Renderer> renderers = gridGenerator.generate(receipts);
for (final Renderer renderer : renderers) {
Logger.debug(this, "Performing measure of {} at {}.", renderer.getClass().getSimpleName(), System.currentTimeMillis());
renderer.measure();
}
for (final Renderer renderer : renderers) {
Logger.debug(this, "Performing render of {} at {}.", renderer.getClass().getSimpleName(), System.currentTimeMillis());
renderer.render(writer);
}
}
}