pdf_matrix xform;
public:
void render(out_context *out, pdf_matrix xform) override;
+ void debug_dump() override
+ {
+ debug("Transform [%s]", xform.to_string().c_str());
+ orig_page->debug_dump();
+ }
xform_page(page *p, pdf_matrix xf);
};
{
bb->x_min += l;
bb->x_max -= r;
- bb->y_min += b;
- bb->y_max -= t;
+ bb->y_min += t;
+ bb->y_max -= b;
if (bb->x_min >= bb->x_max || bb->y_min >= bb->y_max)
err("Margins cannot be larger than the whole page");
}
{
bb->x_min -= l;
bb->x_max += r;
- bb->y_min -= b;
- bb->y_max += t;
+ bb->y_min -= t;
+ bb->y_max += b;
}
};
out->contents += page_cm->pdf_stream(out, page_bbox, xform);
out->contents += image_cm->pdf_stream(out, image_box, xform);
}
+ void debug_dump() override
+ {
+ debug("Draw debugging boxes");
+ orig_page->debug_dump();
+ }
};
class debug_cmd : public cmd_exec_simple {
for (auto p: orig_pages)
p->render(out, xform);
}
+ void debug_dump() override
+ {
+ debug("Merge pages");
+ debug_indent += 4;
+ for (auto p: orig_pages)
+ p->debug_dump();
+ debug_indent -= 4;
+ }
};
vector<page *> merge_cmd::process(vector<page *> &pages)
margins_cmd(cmd *c) : marg(c, "size", "") { }
page *process_page(page *p) override
{
- pdf_matrix xf;
- xf.shift(-p->image_box.x_min, -p->image_box.y_min);
- xf.shift(marg.l, marg.b);
- page *q = new xform_page(p, xf);
- q->width = p->image_box.width() + marg.l + marg.r;
- q->height = p->image_box.height() + marg.t + marg.b;
- if (q->width < 0.001 || q->height < 0.001)
- err("Margins must result in positive page dimensions");
+ page *q = new xform_page(p, pdf_matrix());
+ q->image_box = BBox(marg.l, marg.t, p->width - marg.r, p->height - marg.b);
+ if (q->image_box.width() < 0.001 || q->image_box.height() < 0.001)
+ err("Margins must result in positive image dimensions");
return q;
}
};
cropmark_spec *cmarks;
void render(out_context *out, pdf_matrix xform) override;
nup_page(nup_state &st) : page(st.paper_w, st.paper_h) { }
+ void debug_dump() override
+ {
+ debug("N-up printing");
+ debug_indent += 4;
+ for (auto p: orig_pages)
+ p->debug_dump();
+ debug_indent -= 4;
+ }
};
void nup_page::render(out_context *out, pdf_matrix parent_xform)
orig_page->render(out, xform);
out->contents += cm->pdf_stream(out, image_box, xform);
}
+ void debug_dump() override
+ {
+ debug("Add cropmarks");
+ orig_page->debug_dump();
+ }
cropmarks_page(page *p, cropmark_spec *cms) : page(p), orig_page(p), cm(cms) { }
};
orig_page->render(out, xform);
out->contents += "Q ";
}
+ void debug_dump() override
+ {
+ debug("Clip [%.3f %.3f %.3f %.3f]", clip_to.x_min, clip_to.y_min, clip_to.x_max, clip_to.y_max);
+ orig_page->debug_dump();
+ }
clip_page(page *p, BBox &to) : page(p), orig_page(p), clip_to(to) { }
};