SumatraPDF添加保存标注到TXT文本的功能
Posted 赤龙绕月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SumatraPDF添加保存标注到TXT文本的功能相关的知识,希望对你有一定的参考价值。
由于本人喜欢阅读完PDF以后,把标注导出来作为阅读笔记,所有添加此功能。
SumatraPDF
开源PDF阅读器
使用了mupdf
项目设置
有些项目需要调整语言标准:
VS项目设置 常规 C++语言标准 17或14
VS项目设置 C/C++ 常规 将警告视为错误 否
添加保存标注到TXT文本的功能
使用sumatrapdf-3.3
translations.txt文件添加
:Save AnnotationsToTXT
cn:保存标注到TXT
模仿CmdSaveAnnotations添加CmdSaveAnnotationsToTXT菜单
Commands.h文件添加
V(CmdSaveAnnotationsToTXT, "Save AnnotationsToTXT") \\
Menu.cpp文件添加
{ _TRN("Save AnnotationsToTXT"), CmdSaveAnnotationsToTXT, MF_REQ_DISK_ACCESS },
case CmdSaveAnnotationsToTXT:
case CmdNewBookmarks:
// handle in FrameOnCommand() in SumatraPDF.cpp
HwndSendCommand(win->hwndFrame, cmd);
break;
SumatraPDF.cpp文件FrameOnCommand函数添加:
case CmdSaveAnnotationsToTXT:
SaveAnnotationsToTXT(win->currentTab);
break;
SumatraPDF.cpp文件添加:
static void SaveAnnotationsToTXT(TabInfo* tab) {
EngineBase* engine = tab->AsFixed()->GetEngine();
strconv::StackWstrToUtf8 path{engine->FileName()};
char* fileName = path.Get();
const char* fileNameEx = path::GetExtNoFree(fileName);
const char* fileNameTXT = str::Replace(fileName, fileNameEx, ".txt");
Vec<Annotation*>* annots = new Vec<Annotation*>();
EngineGetAnnotations(engine, annots);
WindowInfo* win = tab->win;
DisplayModel* dm = win->AsFixed();
CrashIf(!dm);
if (!dm) {
return;
}
std::string strTxtTemp;
for (auto& annot : *annots) {
if (annot->isDeleted) {
continue;
}
AnnotationType annotType = Type(annot);
if (annotType == AnnotationType::Highlight || annotType == AnnotationType::Underline ||
annotType == AnnotationType::StrikeOut) {
int pageNo = PageNo(annot);
RectF annotRect = GetRect(annot);
WCHAR* text = dm->GetTextInRegion(pageNo, annotRect);
if (!str::IsEmpty(text)) {
strTxtTemp += strconv::WstrToUtf8(text).data();
}
}
std::string_view annotContents = Contents(annot);
if (annotContents.length() > 0) {
strTxtTemp += annotContents.data();
strTxtTemp += "\\r\\n";
}
}
str::Str str = str::Str(strTxtTemp);
str.AsSpan();
file::WriteFile(strconv::Utf8ToWstr(fileNameTXT), str.AsSpan());
// tab->win->ShowNotification(strTxtTemp, NotificationOptions::Warning);
}
程序下载:
https://download.csdn.net/download/CHIHUN_LOVE/20108404
此程序点击“Save AnnotationsToTXT”菜单即可把当前PDF所有标注导出到与PDF文件同名的TXT文件
以上是关于SumatraPDF添加保存标注到TXT文本的功能的主要内容,如果未能解决你的问题,请参考以下文章
PDF阅读器 SumatraPDF 设置:电子书字体字号的更换及行距设置