惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
Help Net Security
Help Net Security
Y
Y Combinator Blog
WordPress大学
WordPress大学
D
DataBreaches.Net
N
Netflix TechBlog - Medium
U
Unit 42
爱范儿
爱范儿
MyScale Blog
MyScale Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园 - 司徒正美
Google DeepMind News
Google DeepMind News
D
Docker
H
Help Net Security
Stack Overflow Blog
Stack Overflow Blog
宝玉的分享
宝玉的分享
博客园_首页
Microsoft Security Blog
Microsoft Security Blog
Engineering at Meta
Engineering at Meta
Know Your Adversary
Know Your Adversary
P
Privacy & Cybersecurity Law Blog
P
Proofpoint News Feed
T
Tenable Blog
S
Schneier on Security
V
Vulnerabilities – Threatpost
V
V2EX
T
Tor Project blog
Security Latest
Security Latest
S
Securelist
G
Google Developers Blog
NISL@THU
NISL@THU
Schneier on Security
Schneier on Security
Webroot Blog
Webroot Blog
小众软件
小众软件
Google Online Security Blog
Google Online Security Blog
阮一峰的网络日志
阮一峰的网络日志
W
WeLiveSecurity
IT之家
IT之家
I
InfoQ
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
月光博客
月光博客
I
Intezer
T
The Blog of Author Tim Ferriss
C
Cisco Blogs
博客园 - 【当耐特】
The GitHub Blog
The GitHub Blog
Cloudbric
Cloudbric
Scott Helme
Scott Helme
The Cloudflare Blog
L
LINUX DO - 热门话题

如鱼饮水

本地部署Gemma4-26B-A4B模型 不间断空格的处理方法 一个VSCode插件:支持TikZ预览 在Neovim中支持LuaLaTeX高亮 2026年全国I卷压轴题的解答 2026年北京高联预赛的几何题的解答 垂足三角形、等角共轭点与「六点圆」 本地部署 Hy-MT2 翻译模型 2026 年 USAMO 的几何题的解答(一) 使用天地图API进行坐标反查 使用 Vibe Coding 编写一个属于自己的 VSCode 插件 尝试使用 DeepSeek-OCR 2 尝试使用MinerU 使用VSCode编辑Markdown的几个常用设置 在WSL上挂载U盘 在使用LuaLaTeX时控制中英文字符的间距 使用vLLM框架加速PaddleOCR-VL 关于PaddleOCR-VL和PaddleOCR对数学类书籍识别的对比 尝试使用PaddleOCR-VL 关于DeepSeek-OCR和PaddleOCR对数学类书籍识别的对比 白嫖Kaggle平台部署DeepSeek-OCR 关于联想拯救者R9000P的若干问题的解决方法 尝试使用DeepSeek-OCR 使用text-autospace为中英文混排自动添加空格 优化深色模式下的评论系统 让过长的 KaTeX 公式支持横向滚动 在深色模式下自动切换 SVG 的颜色 2025 年高联二试(B 卷)几何题的解答 2025 年高联二试(A 卷)几何题的解答 2025 年 CGMO 的几何题的解答(二)
Vibe Coding一个Python版本的pdf2svg
西风冷香 · 2026-04-29 · via 如鱼饮水

我的博客里面的插图很多都是用Tikz写的,然后编译成PDF再转换为SVG,具体的流程见之前的文章

这里面关键的一步就是如何将PDF转换为SVG

我能找到的唯一一个工具就是pdf2svg,但是它非常简单,而且并不完全符合我的需要。

例如,我发现直接生成的SVG图片太小了,需要放大到1.5倍,里面的字母才会和正文中的字母大小基本一致。这就必须要修改源代码才能解决:

pdf2svg-0.2.4-change-svg-size.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20




@@ -62,12 +62,15 @@ int convertPage(PopplerPage *page, const char* svgFilename)
}
poppler_page_get_size (page, &width, &height);

+ const double scale = 1.5;
+
// Open the SVG file
- surface = cairo_svg_surface_create(svgFilename, width, height);
+ surface = cairo_svg_surface_create(svgFilename, width * scale, height * scale);
cairo_svg_surface_set_document_unit(surface, CAIRO_SVG_UNIT_PT);
drawcontext = cairo_create(surface);

// Render the PDF file into the SVG file
+ cairo_scale(drawcontext, scale, scale);
poppler_page_render_for_printing(page, drawcontext);
cairo_show_page(drawcontext);

最近看到了这篇文章,作者使用Vala重写了pdf2svg工具。于是突然想到,我完全可以重写一个Python版本的pdf2svg。之前也有过类似的念头,不过嫌麻烦就放弃了。

正好最近DeepSeek-V4-Pro模型新发布且大降价,我就使用把它接入Claude Code来完成这次的重写任务。

当然,也是顺带测试一下DeepSeek的新模型。

结果非常成功,一次对话就完成了重写,后面添加了几个功能(将缩放大小、背景颜色作为参数输入,允许更宽泛的页码范围参数),都是一次性就完成了。

具体代码见pdf2svg.py


期间的几点发现:

  1. 刚开始的时候,我发现Claude Code计算的tokens数基本是DeepSeek实际用量的两倍,如图所示:

其中25号使用的都是flash模型,29号使用的都是pro模型。

最初我没想明白,后来刷到了X上的推文,发现是使用中文造成的:

non-English tax

上图中的表格是将同一篇文章翻译成不用的语言之后使用不同模型进行处理,和OpenAI的模型直接处理原始英文文本的tokens数量的对比,作者将其成为「non-English tax」。

横向对比会发现,同样是处理中文文本,Anthropic的模型的tokens用量基本就是DeepSeek V4的两倍。这和前面的观察是相符的。

  1. 我参考这篇文章设置了全局记忆,但是不知道为什么,实际并没有自动生效。最后是我手动命令它「读取global memory」才起了作用。

  2. 由于编程的上下文大都是英文,所以最终Claude Code计算的tokens总用量和DeepSeek实际的用量差的没那么多了。最终花费不到6毛钱,其中将近97%的缓存命中率立了大功。