Package: caj2pdf-restructured
caj2pdf本项目由caj2pdf/caj2pdf重构而来，仅仅修改了 Python 包的组织方式，以便使用包管理工具进行简便地安装和调用。可以使用 build.py 脚本编译二进制依赖可以在任何工作目录下使用 caj2pdf 命令，而无需移动到同一目录如果存在任何关于 CAJ 文件格式而导致的问题，请到caj2pdf/caj2pdf提交反馈。如果存在本项目无法安装、调用出错或者版本过于落后等问题，可到issues提交反馈。Why中国知网的某些文献（多为学位论文）仅提供其专有的 CAJ 格式下载，仅能使用知网提供的软件（如CAJViewer等）打开，给文献的阅读和管理带来了不便（尤其是在非 Windows 系统上）。若要将 CAJ 文件转换为 PDF 文件，可以使用 CAJViewer 的打印功能。但这样得到的 PDF 文件的内容为图片，无法进行文字的选择，且原文献的大纲列表也会丢失。本项目希望可以解决上述两问题。How to use环境和依赖Python 3.10+ （使用了importlib.resources模块，以提供在任意目录下工作的能力）PyPDF2mutool除了Microsoft Windows：我们提供Microsoft Windows 32-bit/64-bit DLLs，HN 格式需要C/C++编译器libpoppler开发包，或libjbig2dec开发包安装ArchLinux# poppler 库sudopacman-Sbase-develpopplermupdf-tools
pipinstallcaj2pdf-restructured# jbig2dec 库sudopacman-Sbase-develjbig2decmupdf-toolsLIBJBIG2DEC=1pipinstallcaj2pdf-restructured或使用pipx# poppler 库sudopacman-Sbase-develpopplermupdf-tools
pipxinstallcaj2pdf-restructured# jbig2dec 库sudopacman-Sbase-develjbig2decmupdf-toolsLIBJBIG2DEC=1pipxinstallcaj2pdf-restructuredDebian, Ubuntu 等 Linux# poppler 库sudoaptinstallbuild-essentiallibpoppler-devmupdf-tools
pipinstallcaj2pdf-restructured或使用pipx# poppler 库sudoaptinstallbuild-essentiallibpoppler-devmupdf-tools
pipxinstallcaj2pdf-restructured注意：jbig2dec 库在 Ubuntu/Debian 上的安装存在依赖问题，因此建议只使用 poppler 库。Ubuntu 16.04 的 poppler 库版本过于落后，建议在较新的系统上安装。Windows可以直接通过 pip 或 pipx 安装：pipinstallcaj2pdf-restructured

pipxinstallcaj2pdf-restructured然后，从mutool下载 mupdf-1.18.0-windows.zip 并解压，将其中的 mutool.exe 添加到PATH变量中的路径下，以便从任意位置调用。如果你使用choco或scoop作为 Windows 下的包管理工具，则可一键式安装：chocoinstallmupdf或者scoopinstallmupdf用法# 打印文件基本信息（文件类型、页面数、大纲项目数）
caj2pdf show [input_file]

# 转换文件
caj2pdf convert [input_file] -o/--output [output_file]

# 从 CAJ 文件中提取大纲信息并添加至 PDF 文件
## 遇到不支持的文件类型或 Bug 时，可用 CAJViewer 打印 PDF 文件，并用这条命令为其添加大纲
caj2pdf outlines [input_file] -o/--output [pdf_file]例caj2pdf show test.caj
caj2pdf convert test.caj -o output.pdf
caj2pdf outlines test.caj -o printed.pdf右键菜单0.1.0a4 版本后，可以在 Windows 系统上使用右键菜单转换 CAJ 文件了。需要在命令行中调用命令caj2pdf install安装注册表，然后才能使用此功能。
如果卸载程序，注册表不会被清理，待研究 pip，看看能不能在 uninstall 之前加 HOOK。TODO: 清理注册表的功能。异常输出（IMPORTANT!!!）尽管这个项目目前有不少同学关注到了，但它仍然只支持部分 caj 文件的转换，必须承认这完全不是一个对普通用户足够友好的成熟项目。具体支持哪些不支持哪些，在前文也已经说了，但似乎很多同学并没有注意到。所以如果你遇到以下两种输出，本项目目前无法帮助到你。与此相关的 issue 不再回复。Unknown file type.：未知文件类型；How far we've come知网下载到的后缀为caj的文件内部结构其实分为两类：CAJ 格式和 HN 格式（受考察样本所限可能还有更多）。目前本项目支持 CAJ 格式文件的转换，HN 格式的转换未完善，并且需要建立两个新的共享库（除了Microsoft Windows：我们提供Microsoft Windows 32-bit/64-bit DLLs），详情如下：cc -Wall -fPIC --shared -o libjbigdec.so jbigdec.cc JBigDecode.cc
cc -Wall `pkg-config --cflags poppler` -fPIC -shared -o libjbig2codec.so decode_jbig2data.cc `pkg-config --libs poppler`抑或和libpoppler 相比，还是取决于您是否更喜欢libjbig2dec一点，可以替换libpoppler：cc -Wall -fPIC --shared -o libjbigdec.so jbigdec.cc JBigDecode.cc
cc -Wall `pkg-config --cflags jbig2dec` -fPIC -shared -o libjbig2codec.so decode_jbig2data_x.cc `pkg-config --libs jbig2dec`NOTE（zombie110year,2021/04/20）：现在可以使用python build.py指令来编译链接库了。并且源代码和输出文件的路径移动到了caj2pdf/dep之中，和上面的命令不同。默认使用 libpoppler 作为依赖编译：pythonbuild.py或者，使用 jbig2dec 作为依赖编译：LIBJBIG2DEC=1pythonbuild.py关于两种格式文件结构的分析进展和本项目的实现细节，请查阅项目 Wiki。How to contribute受测试样本数量所限，即使转换 CAJ 格式的文件也可能（或者说几乎一定）存在 Bug。如遇到这种情况，欢迎在Issue中提出，并提供可重现 Bug 的 caj 文件——可以将样本文件上传到网盘等处，也可直接提供知网链接（作者已滚出校园网，提 issue 请提供可下载的 caj 文件）。如果你对二进制文件分析、图像/文字压缩算法、逆向工程等领域中的一个或几个有所了解，欢迎帮助完善此项目。你可以从阅读项目 Wiki开始，看看是否有可以发挥你特长的地方。Pull requests are always welcome.License本项目基于GLWTPL(Good Luck With That Public License) 许可证开源。