+ ps_comment(fp, "% ", p->words);
+
+ cc = 0;
+ /*
+ * Request the correct page size. We might want to bracket this
+ * with "%%BeginFeature: *PageSize A4" or similar, and "%%EndFeature",
+ * but that would require us to have a way of getting the name of
+ * the page size given its dimensions.
+ */
+ ps_token(fp, &cc, "/setpagedevice where {\n");
+ ps_token(fp, &cc, " pop 2 dict dup /PageSize [%g %g] put setpagedevice\n",
+ doc->paper_width / FUNITS_PER_PT,
+ doc->paper_height / FUNITS_PER_PT);
+ ps_token(fp, &cc, "} if\n");
+
+ ps_token(fp, &cc, "[/PageMode/UseOutlines/DOCVIEW m\n");
+ noe = doc->n_outline_elements;
+ for (oe = doc->outline_elements; noe; oe++, noe--) {
+ char *title;
+ int titlelen, count, i;
+
+ title = pdf_outline_convert(oe->pdata->outline_title, &titlelen);
+ if (oe->level == 0) {
+ ps_token(fp, &cc, "[/Title");
+ ps_string_len(fp, &cc, title, titlelen);
+ ps_token(fp, &cc, "/DOCINFO m\n");
+ }
+
+ count = 0;
+ for (i = 1; i < noe && oe[i].level > oe->level; i++)
+ if (oe[i].level == oe->level + 1)
+ count++;
+ if (oe->level > 0) count = -count;
+
+ ps_string_len(fp, &cc, title, titlelen);
+ sfree(title);
+ ps_token(fp, &cc, "%s %d o\n",
+ (char *)oe->pdata->first->page->spare, count);
+ }
+
+ for (fe = doc->fonts->head; fe; fe = fe->next) {
+ /* XXX This may request the same font multiple times. */
+ if (fe->font->info->fontfile) {
+ fprintf(fp, "%%%%BeginResource: font %s\n", fe->font->info->name);
+ if (fe->font->info->filetype == TYPE1)
+ pf_writeps(fe->font->info, fp);
+ else
+ sfnt_writeps(fe->font->info, fp);
+ fprintf(fp, "%%%%EndResource\n");
+ } else {
+ fprintf(fp, "%%%%IncludeResource: font %s\n",
+ fe->font->info->name);
+ }
+ }