gutenberg.itext.support.FirstPageRenderer Maven / Gradle / Ivy
package gutenberg.itext.support;
import com.google.common.base.Supplier;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import gutenberg.itext.FontCopier;
import gutenberg.itext.ITextContext;
import gutenberg.itext.SimpleEmitter;
import gutenberg.itext.Styles;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author @aloyer
*/
public class FirstPageRenderer implements SimpleEmitter {
public static final String FIRST_PAGE_TITLE_FONT = "first-page-title-font";
public static final String FIRST_PAGE_SUBJECT_FONT = "first-page-subject-font";
private Logger log = LoggerFactory.getLogger(FirstPageRenderer.class);
private final String title;
private final String subject;
public FirstPageRenderer(String title, String subject) {
this.title = title;
this.subject = subject;
}
@Override
public void emit(ITextContext context) {
try {
Document document = context.getDocument();
appendMainPage(context, document);
document.newPage();
} catch (DocumentException e) {
log.warn("Failed to render cover page", e);
}
}
private void appendMainPage(ITextContext context, Document document) throws DocumentException {
Paragraph mainPage = new Paragraph();
appendTitle(context, mainPage);
appendSubject(context, mainPage);
document.add(mainPage);
}
private void appendSubject(ITextContext context, Paragraph preface) {
if (StringUtils.isEmpty(subject)) {
return;
}
Styles styles = context.styles();
Font font = styles.getFont(FIRST_PAGE_SUBJECT_FONT).or(subjectFont(styles));
for (String titlePart : subject.split("[\n\r]+")) {
Paragraph paragraph = new Paragraph(titlePart, font);
paragraph.setAlignment(Element.ALIGN_RIGHT);
paragraph.setSpacingAfter(15.0f);
preface.add(paragraph);
}
}
private Supplier extends Font> subjectFont(final Styles styles) {
return new Supplier() {
@Override
public Font get() {
return FontCopier
.copyFont(styles.defaultFont())
.color(BaseColor.DARK_GRAY)
.size(18f)
.get();
}
};
}
private void appendTitle(ITextContext context, Paragraph preface) {
if (StringUtils.isEmpty(title)) {
return;
}
Styles styles = context.styles();
Font font = styles.getFont(FIRST_PAGE_TITLE_FONT).or(titleFont(styles));
Paragraph paragraph = null;
for (String titlePart : title.split("[\n\r]+")) {
paragraph = new Paragraph(titlePart, font);
paragraph.setAlignment(Element.ALIGN_RIGHT);
paragraph.setSpacingAfter(15.0f);
preface.add(paragraph);
}
if (paragraph != null) {
paragraph.setSpacingAfter(30.0f);
}
}
private Supplier extends Font> titleFont(final Styles styles) {
return new Supplier() {
@Override
public Font get() {
return FontCopier
.copyFont(styles.defaultFont())
.color(styles.defaultColor())
.size(32f)
.get();
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy