2016-08-23 53 views
0

有沒有人在C++上使用過jagPDF?JAGPDF在C++對齊測試

我想學習如何使用它們提供的手冊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:以零結尾的字符串。
  • 偏移量:在字形空間(即單位文本空間的千分之一)中表示的字形偏移量。
  • offset_length:偏移量。
  • 位置:將字形偏移與txt_u中的字形索引相關聯。
  • positions_length:職位數量。

我已經嘗試了幾件事情,但我還沒有弄清楚C++要求Python的另外兩個輸入參數。如果有人在那裏使用jagPDF並知道如何用C++做,我會非常感激。

回答

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(); 

希望它可以幫助