LINUX.ORG.RU

Cairo, нельзя выбрать текст в ps

 ,


0

1

Программа рендерит ps и pdf. В pdf текст выбрать и скопировать можно, в ps почему-то нет. Внутри видно, что текст растеризуется и ниже растра еще раз пишется. Просматриваю файлы в Evince. Как заставить cairo не растеризовать текст?

// gcc -Wall -o cairo_print cairo_print.c `pkg-config --cflags --libs cairo`

#include <stdio.h>
#include <cairo.h>
#include <cairo-ps.h>
#include <cairo-pdf.h>

// A4 width, height in points, from GhostView manual:
// http://www.gnu.org/software/gv/manual/html_node/Paper-Keywords-and-paper-size-in-points.html
#define WIDTH  595  
#define HEIGHT 842  

void draw(cairo_t *context, char** argv) {
    cairo_select_font_face(context, "Liberation Serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
    cairo_set_font_size(context, 30);
    cairo_move_to(context, WIDTH/2, HEIGHT/2);
    cairo_show_text(context, argv[1]);
}

void end(cairo_surface_t* surface, cairo_t *context) {
    cairo_show_page(context);
    cairo_destroy(context);
    cairo_surface_flush(surface);
    cairo_surface_destroy(surface);
}

int main(int argc, char** argv) {
    if (argc!= 2){
        fprintf (stderr, "usage: %s word\n", argv[0]);
        return 1;
    }

    cairo_surface_t* surface;
    cairo_t *context;

    surface = cairo_ps_surface_create("out.ps", WIDTH, HEIGHT);
    context = cairo_create(surface);
    draw(context, argv);
    end(surface, context);

    surface = cairo_pdf_surface_create("out.pdf", WIDTH, HEIGHT);
    context = cairo_create(surface);
    draw(context, argv);
    end(surface, context);

    return 0;
}

Ответ на: комментарий от monk

«The PostScript surface natively supports Type 1 and TrueType fonts. All other fonts types (including OpenType/PS) are converted to Type 1.

Fonts are always subsetted and embedded.»

Он конвертирует, а не растеризует. Во всяком случае так здесь написано.

Используемый в примере Liberation установлен в формате ttf -> TrueType.

Gregon ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.