summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorPaul Gardiner <paulg.artifex@glidos.net>2013-07-29 11:39:41 +0100
committerPaul Gardiner <paulg.artifex@glidos.net>2013-07-29 11:39:41 +0100
commit9eb5dbcb3c884a1573d1a78b00dd345635fec0db (patch)
tree1ef7985cf85ecd26d4cabc1df3f2799b2bab3ca0 /source
parentd812f7ca3a2d1f87b18d6583dad4abfc9d01b3ae (diff)
downloadmupdf-9eb5dbcb3c884a1573d1a78b00dd345635fec0db.tar.xz
A few updates to the pdf device
Ensure that only base14 fonts are used Set BaseFont using the name from the font Use WinAnsiEncoding Derive the font size from the trm matrix
Diffstat (limited to 'source')
-rw-r--r--source/pdf/pdf-device.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/source/pdf/pdf-device.c b/source/pdf/pdf-device.c
index 41776ee5..0074f7eb 100644
--- a/source/pdf/pdf-device.c
+++ b/source/pdf/pdf-device.c
@@ -543,6 +543,9 @@ pdf_dev_font(pdf_device *pdev, fz_font *font, float size)
if (gs->font >= 0 && pdev->fonts[gs->font].font == font)
return;
+ if (font->ft_data != NULL || font->ft_substitute)
+ fz_throw(pdev->ctx, FZ_ERROR_GENERIC, "pdf device supports only base 14 fonts currently");
+
/* Have we sent such a font before? */
for (i = 0; i < pdev->num_fonts; i++)
if (pdev->fonts[i].font == font)
@@ -569,11 +572,11 @@ pdf_dev_font(pdf_device *pdev, fz_font *font, float size)
o = pdf_new_dict(doc, 3);
fz_try(ctx)
{
- /* BIG FIXME: Get someone who understands fonts to fill this bit in. */
char text[32];
pdf_dict_puts_drop(o, "Type", pdf_new_name(doc, "Font"));
pdf_dict_puts_drop(o, "Subtype", pdf_new_name(doc, "Type1"));
- pdf_dict_puts_drop(o, "BaseFont", pdf_new_name(doc, "Helvetica"));
+ pdf_dict_puts_drop(o, "BaseFont", pdf_new_name(doc, font->name));
+ pdf_dict_puts_drop(o, "Encoding", pdf_new_name(doc, "WinAnsiEncoding"));
ref = pdf_new_ref(doc, o);
snprintf(text, sizeof(text), "Font/F%d", i);
pdf_dict_putp(pdev->resources, text, ref);
@@ -658,7 +661,6 @@ pdf_dev_text(pdf_device *pdev, fz_text *text)
gstate *gs = CURRENT_GSTATE(pdev);
fz_matrix trunc_trm;
- /* BIG FIXME: Get someone who understands fonts to fill this bit in. */
trm = gs->tm;
trunc_trm.a = trm.a;
trunc_trm.b = trm.b;
@@ -681,6 +683,8 @@ pdf_dev_text(pdf_device *pdev, fz_text *text)
trm.e = it->x;
trm.f = it->y;
}
+ /* FIXME: should use it->gid, rather than it->ucs, and convert
+ * to the correct encoding */
fz_buffer_printf(pdev->ctx, gs->buf, "<%02x> Tj\n", it->ucs);
/* FIXME: Advance the text position - doesn't matter at the
* moment as we absolutely position each glyph, but we should
@@ -899,9 +903,13 @@ pdf_dev_fill_text(fz_device *dev, fz_text *text, const fz_matrix *ctm,
fz_colorspace *colorspace, float *color, float alpha)
{
pdf_device *pdev = dev->user;
+ fz_matrix trm = text->trm;
+ float size = fz_matrix_expansion(&trm);
- pdf_dev_begin_text(pdev, &text->trm, 0);
- pdf_dev_font(pdev, text->font, 1);
+ fz_pre_scale(&trm, 1/size, 1/size);
+
+ pdf_dev_begin_text(pdev, &trm, 0);
+ pdf_dev_font(pdev, text->font, size);
pdf_dev_ctm(pdev, ctm);
pdf_dev_alpha(pdev, alpha, 0);
pdf_dev_color(pdev, colorspace, color, 0);