JAGPDF在C ++中对齐测试

时间:2016-08-23 15:38:45

标签: c++ pdf pdf-generation

有没有人在c ++上使用过jagPDF?

我正在尝试从他们在http://www.jagpdf.org/doc/index.htm提供的手册中学习如何使用它。不幸的是,他们所有的例子都在Python中。有时候适应C ++并不是什么大问题,但有时候会让人感到困惑。

例如,我正在尝试学习如何对齐文本,教程中的文本位于Text Aligment。找到填充后,将填充放在文本行中的函数是:

canvas.text(txt, [padding / 2.0], [0])

查看该函数的引用,转换表为:

[py]   text(txt_u, offsets, positions)
[c++]  void text(Char const* txt_u, Double const* offsets, UInt      offsets_length, Int const* positions, UInt positions_length);

参数:

  • txt_u :零终止字符串。
  • 偏移:以字形空间表示的字形偏移量(即以文本空间为单位的千分之一)。
  • offsets_length :偏移次数。
  • 位置:将字形偏移与txt_u中的字形索引相关联。
  • positions_length :职位数。

我已经尝试了几件事,但我还没有弄清楚c ++需要的两个额外的输入参数。如果那里有人使用过jagPDF并且知道如何用c ++来做,我会非常感激。

1 个答案:

答案 0 :(得分:0)

这是我对JagPDF的第一次接触。有部分文本对齐,但代码是在Python上编写的。

在C ++中它应该是:

// line width
pdf::Double line_width = 597.6;
// text to show
pdf::Char *txt = "Everything should be made as simple as possible, but no simpler.";
// calculate text width
pdf::Double text_width = font.advance(txt);
// calculate gap - difference in line_width and text_width
pdf::Double gap = line_width - text_width;
// calculate the text padding
pdf::Double padding = -1000.0 / font.size() * gap;

// create array with paddings - I set all padings, but is used only 1
pdf::Double const pp[] = { padding, padding / 2.0 }; // index 0 for right alignment, 1 for center
// not sure what are positions, but need for function `text()` - set as Doc to zero (0)
pdf::Int const dd[] = { 0};

// get canvas where the text is written
pdf::Canvas canvas = doc.page().canvas();

// start text block
canvas.text_start(0, 480);
// set font
canvas.text_font(font);

// right alignment text
canvas.text(txt, pp, 1, dd, 1);
canvas.text_translate_line(0, font.height());

// center alignment text
canvas.text(txt, &pp[1], 1, dd, 1);
canvas.text_translate_line(0, font.height());

// finish text block
canvas.text_end();

希望有所帮助