2015年10月3日

MuPDFで注釈の読み込みができたので,書き込みもしてみた.pdf_set_annot_contentsなんてまんまな関数があったので使ってみたが,全角文字がダメ.pdf_from_ucs2ってのがあったけどこれはよくわからない.PDFはUTF-16で行けるよなぁと,無理矢理wchar_tをcharにしてぶちこんで見たがダメ.そういえばとBOMつけてリトルエンディアンになおしてpdf_set_annot_contentsに入れてみたがダメ.で,結局こうなった.

std::vector<char> buf;
buf.resize(s.length() * 2 + 3);
buf[0] = 0xFE; buf[1] = 0xFF; buf[2 * s.length() + 2] = '\0';
for (int i = 0; i < s.length(); ++i) {
    buf[2 * i + 3] = s[i] & 0x00FF;
    buf[2 * i + 2] = (s[i] & 0xFF00) >> 8;
}
pdf_dict_puts_drop(a.annot->obj, "Contents", pdf_new_string(a.document, &buf[0], 2*s.length() + 2));   

要するに「BOM付きUTF-16LEにして文字数を指定して直接書く」ということだった…….pdf_set_annot_contentsはstrlenで文字列をはかってになっていたので失敗していたようだ.UTF-16なんてcharの文字列に無理矢理なおしたら0すぐに入る物なぁ.

0 件のコメント:

コメントを投稿

コメントの追加にはサードパーティーCookieの許可が必要です