1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
--- src/gdevpdfw.c.org 2003-01-17 09:49:02.000000000 +0900
+++ src/gdevpdfw.c 2003-09-25 17:50:54.000000000 +0900
@@ -348,18 +348,19 @@
/* Use the most common width as DW. */
{
- ushort counts[1001];
+ ushort counts[1500*2]; /* histogram of (-1500..1500) */
int dw_count = 0, i;
memset(counts, 0, sizeof(counts));
while (!psf_enumerate_glyphs_next(&genum, &glyph)) {
- int width = ppf->Widths[glyph - gs_min_cid_glyph];
+ int cid = glyph - gs_min_cid_glyph;
+ int width = ppf->Widths[cid];
- counts[min(width, countof(counts) - 1)]++;
+ counts[max(0,min(width+countof(counts)/2,countof(counts)-1))]++;
}
- for (i = 0; i < countof(counts); ++i)
+ for (i = 0; i < countof(counts); i++)
if (counts[i] > dw_count)
- dw = i, dw_count = counts[i];
+ dw = i - countof(counts)/2, dw_count = counts[i];
if (dw != 0)
pprintd1(s, "/DW %d\n", dw);
}
@@ -496,14 +497,16 @@
if (pdf_has_subset_prefix(chars, size))
chars += SUBSET_PREFIX_SIZE, size -= SUBSET_PREFIX_SIZE;
pdf_put_name(pdev, chars, size);
- if (pef->sub_font_type == ft_CID_encrypted &&
+ if ((pef->sub_font_type == ft_CID_encrypted ||
+ pef->sub_font_type == ft_CID_TrueType) &&
pef->cmapname[0] == '/'
) {
stream_putc(s, '-');
pdf_put_name_chars(pdev, (const byte*) (pef->cmapname + 1),
strlen(pef->cmapname + 1));
}
- pprints1(s, "/Encoding %s", pef->cmapname);
+ pprints1(s, (pef->cmapname[0] == '/') ? "/Encoding%s" : "/Encoding %s",
+ pef->cmapname);
pprintld1(s, "/DescendantFonts[%ld 0 R]",
pdf_resource_id((const pdf_resource_t *)pef->DescendantFont));
write_Widths = 0;
@@ -563,8 +566,10 @@
break;
case -1:
pdf_write_CIDFont_widths(pdev, pef);
- if (pef->FontType == ft_CID_TrueType)
- pdf_write_CIDToGIDMap(pdev, pef, &cidmap_id);
+ if (pef->FontType == ft_CID_TrueType) {
+ if (pef->embed != FONT_EMBED_NO)
+ pdf_write_CIDToGIDMap(pdev, pef, &cidmap_id);
+ }
break;
}
if (pef->Differences) {
|