Каир PDF ограничивающий прямоугольник - PullRequest
0 голосов
/ 18 декабря 2018

Я использую графику Cairo с C ++ и вывод в PDF.Однако, когда изображение включено в документ (LaTeX), вокруг фигуры слишком много пустого пространства.Как одна программа запрограммирует Каир наложить жесткую ограничивающую рамку вокруг фигуры?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018
/*
https://cairographics.org/manual/cairo-Recording-Surfaces.html
*/

#include <stdio.h>
#include <math.h>

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

void star(cairo_t* cr, double radius)
  {
  double theta = 0.8*M_PI;
  cairo_save(cr);
  cairo_move_to(cr, 0.0, -radius);
  for(int i=0; i<5; i++)
    {
    cairo_rotate(cr, theta);
    cairo_line_to(cr, 0.0, -radius);
    }
  cairo_fill(cr);
  cairo_restore(cr);
  }

int main()
  {
  // set recording surface
  cairo_surface_t* record = cairo_recording_surface_create(CAIRO_CONTENT_COLOR_ALPHA, NULL);
  cairo_t* cr = cairo_create(record);
  // start image
  cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); // set color to black
  star(cr, 100);                           // big star
  cairo_set_source_rgb(cr, 0.0, 0.0, 1.0); // set color to blue
  star(cr, 95);                            // smaller star
  // end image
  double x0, y0, width, height;
  cairo_recording_surface_ink_extents(record, &x0, &y0, &width, &height);
  // printf("Size %lf by %lf at (%lf, %lf)\n", width, height, x0, y0);

  // create pdf image
  const char* outputfile = "bb.pdf";
  cairo_surface_t* target = cairo_pdf_surface_create(outputfile, width, height);
  cairo_t*         crt    = cairo_create(target);
  // copy recorded image to target and paint
  cairo_set_source_surface(crt, record, -x0, -y0);
  cairo_paint(crt);
  // clean up
  cairo_destroy (cr);
  cairo_surface_destroy (record);
  cairo_destroy (crt);
  cairo_surface_destroy (target);
  }
0 голосов
/ 18 декабря 2018

Вы передаете ширину и высоту, которые вам нужны, когда вы вызываете cairo_pdf_surface_create ().После этого вы сами выбираете, сколько из этого пространства вы хотите заполнить рисунком.Если вы попросите Каир нарисовать весь путь до краев, это произойдет.

Единственное, о чем я могу подумать, это то, что LaTeX добавляет границу.Это, однако, выходит за рамки моей компетенции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...