pdfiumで注釈を読み書きしようとしている.とりあえず読む方だけは次でできそう.
auto doc = ::FPDF_LoadDocument(file, nullptr);
auto page = ::FPDF_LoadPage(doc, 0);
int annot_cnt = ::FPDFPage_GetAnnotCount(page);
for (int i = 0; i < annot_cnt; ++i) {
auto a = ::FPDFPage_GetAnnot(page, i);
// 下のContentsは新しいバージョンだとUTF-16かも?
unsigned long len = FPDFAnnot_GetStringValue(a, "Contents", nullptr, 0);
std::vector<char> buf(len);
FPDFAnnot_GetStringValue(a, kContentsKey, buf.data(), len);
// wstrに文字列が入っている
std::wstring wstr((wchar_t*)(&buf[0]));
}
書く方は次のようにしてみたがうまく動いていない.
class PDFWriter : public FPDF_FILEWRITE {
public:
PDFWriter(const string& path) : ofs(path, ios_base::out | ios_base::binary) {
version = 1;
WriteBlock = [](struct FPDF_FILEWRITE_* pThis, const void* pData, unsigned long size) {
((PDFWriter*)pThis)->ofs.write((char*)pData, size);
return TRUE;
};
}
private:
ofstream ofs;
};
FPDF_DOCUMENT doc = ::FPDF_LoadDocument(file, nullptr);
FPDF_PAGE page = ::FPDF_LoadPage(doc, 0);
auto a = ::FPDFPage_CreateAnnot(page, FPDF_ANNOT_TEXT);
wchar_t* sample = L"XY";% 書き込む文字列
::FPDFAnnot_SetStringValue(a, "Contents", (FPDF_WIDESTRING)sample);
::FPDFAnnot_SetFlags(an, 35);
PDFWriter writer(output_file);
::FPDF_SaveAsCopy(doc, &writer, 0)
しかし保存されていない.最後のFPDF_SaveAsCopy
をもう一度実行すると,pdfiumからは
読み出せる注釈ができるようだが,しかしAcrobatでは見られなかった.うーん,よくわからない…….
0 件のコメント:
コメントを投稿
コメントの追加にはサードパーティーCookieの許可が必要です