TrueTypeフォントで、文字列の幅が計算(調整)方法です。
HPDF_Font_GetUnicodeWidth()関数
を使えば、個々の文字の幅がわかります。
JSONのデータを扱うことがあり、調べました。
JSONについては、ここに書いています。
http://www.json.org/json-ja.html
C++に処理するにあたり、ヘッダファイルだけで扱えるとのことで、調べてみました。
ライブラリは動作させるまでが大変だっりします。
ここから、picojson.hをダウンロードします。
https://github.com/kazuho/picojson
このようなツールが作れることに尊敬します。
■使い方
色々なサイトを参考にさせてもらいました。
// 変数
stringstream ss;
ifstream f;
unsigned int i;
// Jsonファイルの読み込み
f.open("Books", ios::binary);
if (!f.is_open()){
return 1;
}
ss << f.rdbuf();
f.close();
// Parse Json data
value v;
ss >> v;
string err = get_last_error();
if(!err.empty()) {
cerr << err << endl;
return -1;
}
■オブジェクトの読み込み
object &o = v.get<object>();
rootsを読む例
object o = v.get<object>()["roots"].get<object>();
■オブジェクトの抽出
object o = v.get<object>()["roots"].get<object>();
for (object::const_iterator it = o.begin(); it != o.end(); it++) {
char buf[4096];
sprintf_s(buf, "%s", it->first.c_str());
MessageBoxA(NULL,buf,"first",MB_OK);
}
it-firstは文字列
it-secondは値
文字列への変換には、to_str()を使用
c_str()で、stringをcharにします。
it-second.to_str().c_str()
■Arrayの読み込み
barの下にchildがある例
object& o2 = o["bar"].get<object>();
array& aAry = o2["child"].get<array>();
for (i = 0; i < aAry.size(); i++){
object& o3 = aAry[i].get<object>();
strcpy(buf,(char *)o3["name"].get<string>().c_str());
}
■型の確認例
型の確認は、getの代わりにisを使います。
//バッファの型を確認
if (o[buf].is<string>() == TRUE){
}else if (o[buf].is<array>() == TRUE){
}else if (o[buf].is<object>() == TRUE){
まだ、勉強中なのでここまでです。
HPDFでの画像関係のメモです。
HPDF_Doc pdf;
HPDF_Page page = HPDF_GetCurrentPage (pdf);
//PDFやpageは、なんやかんやする。
HPDF_Image image;
//png画像のをimageに読み込む、filenameは、ファイル名
image = HPDF_LoadPngImageFromFile (pdf, filename);
//横幅を取得
int GetWSize = HPDF_Image_GetWidth(image);
//縦幅を取得
int GetHSize = HPDF_Image_GetHeight(image);
//PDFに画像を書き込み
HPDF_Page_DrawImage (page, image, x, y,横幅,縦幅);
Rubyで、ロードしていないWindowsのレジストリファイルを確認するソースです。これなら、Linuxからでも動作できます。
入手先
Volatile Minds: Reading offline registry hives in pure ruby
また、調べることがあります。
# -*- Encoding:UTF-8 -*-
require 'win32ole'
class Excel
end
excel = WIN32OLE.new('Excel.Application')
WIN32OLE.const_load(excel, Excel)
#Excelファイルをダイアログで開く場合
#book_file = excel.GetOpenFilename
#book = excel.WorkBooks.Open(book_file)
#ファイル名指定で開く場合1(COM使用)
#fso = WIN32OLE.new('Scripting.FileSystemObject')
#filename = fso.GetAbsolutePathName("test.xlsx")
#book = excel.WorkBooks.Open(filename)
#ファイル名指定で開く場合2
#book = excel.workbooks.open 'sample.xlsx'
# 新規ブックを作成
book = excel.workbooks.add
#画面に状況を表示させる。
excel.visible = true
#シートにワークシートの1を指定
sheet = book.Worksheets(1)
#セルの値を取得(縦、横)
#s = sheet.Cells.Item(3,3).value
#セルに値を格納(縦、横)
sheet.Cells.Item(3,3).value = 1000
sheet.Cells.Item(2,2).value = "画像一覧"
#test
sheet.Cells.Item(2,2).Font.Size = 20
sheet.Cells.Font.Name = 'MS ゴシック'.tosjis
#sheet.Cells.Item(2, 2).Font.Bold = true #失敗
#スタイル
#折り返して表示
#列の幅
#罫線
range = sheet.range("F11:G16")
#色
#range.Interior.ColorIndex = 6
#range.Interior.Pattern = Excel::XlSolid
#罫線
#線の種類
range.borders.lineStyle = Excel::XlContinuous
#線の太さ
range.borders.weight = Excel::XlThin
#名前を付けて保存する
#book.saveAs 'e:\test.xlsx'
#Excelブックを閉じる
#true:上書き false:上書きしない
#book.close(true)
#Excel終了
#excel.quit
罫線に成功です。
# -*- Encoding:UTF-8 -*-ire 'win32ole'
require 'win32ole'
class Excel
end
excel = WIN32OLE.new('Excel.Application')
WIN32OLE.const_load(excel, Excel)
# 新規ブックを作成
book = excel.workbooks.add
#画面に状況を表示させる。
excel.visible = true
#シートにワークシートの1を指定
sheet = book.Worksheets(1)
#罫線の範囲
range = sheet.range("F11:G16")
#線の種類
range.borders.lineStyle = Excel::XlContinuous
他にも、線の場所とか太さは、また