将PDF转换为干净的SVG?
我正在尝试将PDF转换为SVG。然而,我目前使用的一个映射了每段文本中每个字母的路径,这意味着如果我更改其源文件中的文本,它看起来很难看将PDF转换为干净的SVG?,pdf,svg,Pdf,Svg,我正在尝试将PDF转换为SVG。然而,我目前使用的一个映射了每段文本中每个字母的路径,这意味着如果我更改其源文件中的文本,它看起来很难看 我想知道什么是最干净的PDF-to-SVG转换器,希望它的文本区域不需要路径。正如我们所知,PDF和SVG非常相似,所以我假设有一些很好的转换器。Inkscape被维基百科上的许多人用来将PDF转换为SVG 他们甚至有一个方便的指南如何做到这一点 您只能在命令行上使用Inkscape,而无需打开GUI。试试这个: inkscape \ --without
我想知道什么是最干净的PDF-to-SVG转换器,希望它的文本区域不需要路径。正如我们所知,PDF和SVG非常相似,所以我假设有一些很好的转换器。Inkscape被维基百科上的许多人用来将PDF转换为SVG 他们甚至有一个方便的指南如何做到这一点
您只能在命令行上使用Inkscape,而无需打开GUI。试试这个:
inkscape \
--without-gui \
--file=input.pdf \
--export-plain-svg=output.svg
要获得所有命令行选项的完整列表,请运行inkscape--help
我当前使用的对图形输出有良好支持的工具。对于提取矢量笔划和管理字体都有很好的支持。有一些很好的工具可以试用(例如,PDFReader将显示为Java Graphics2D)。您可以使用类似Batik的SVG工具截取图形工具(我这样做,它提供了很好的捕获)
没有简单的方法可以将所有PDF转换为SVG——这取决于用于创建PDF的策略和工具。有些文本被转换为矢量,无法轻松重建-您必须安装矢量字体并查找它们
更新:
我现在已将其开发成不再使用蜡染的:
已经在一系列PDF上进行了测试。它生成SVG输出,包括
- 每个字符作为一个
- 路径为
- 图像显示为
更新。(@Tim Kelty)我们正在继续研究PDF2SVG和下游工具,这些工具可以(有限地)进行Java OCR和创建更高级的图形原语(箭头、方框等),请参见和。这是一个获得资助的项目,旨在从科学文献(contentmine.org)中获取1亿个事实,其中大部分是PDF。如果选择DVI到SVG,您还可以使用将DVI文件转换为SVG文件。例如,对于LaTeX公式(使用选项<代码>--无字体),这非常有效:
还有一种方法使用poppler和Cairo将pdf转换为SVG。当我尝试这样做时,SVG在
inkscape
中得到了完美的渲染,我发现xfig
做得非常好:
pstoedit -f fig foo.pdf foo.fig
xfig foo.fig
export to svg
它比inkscape做得好得多。实际上,可能是pdtoedit做的。这个主题很古老,但我发现了一个简便的解决方案: 它提供了一个工具pdf2png,一旦安装,它就可以在命令行中准确地完成任务。到目前为止,我已经用无可指责的结果对它进行了测试,包括位图
编辑:我错了,这个工具还将字母转换为路径,所以它没有解决最初的问题。无论如何,它做得很好,对任何不打算修改svg文件中的代码的人都很有用,所以我将离开这篇文章。以下是我最后使用的过程。我使用的主要工具是Inkscape,它能够正确地转换文本
- 使用AdobeAcrobatPro操作和JavaScript拆分PDF表单
- 从Windows Cmd运行Inkscape Portable 0.48.5以转换为SVG
- 使用Windows Cmd和Windows PowerShell对我遇到问题的特定SVG XML属性进行了一些手动编辑
/*将页面提取到文件夹*/
var re=/.\/\.pdf$/ig;
var filename=this.path.replace(re,“”);
{
对于(var i=0;i
PDF到SVG的转换:带有Windows CMD批处理文件的Inkscape
使用Windows Cmd创建批处理文件,循环遍历文件夹中的所有PDF文件,并将其转换为SVG
将当前文件夹中的PDF转换为SVG的批处理文件
:=======设置=====
@回音
CLS
正在启动SVG转换。。。
回声。
::设置工作目录(如果不同)
REM集合“\u work\u dir=%~dp0”
设置“\u工作\u目录=%CD%”
::设置计数器
设置“计数=1”
::设置文件搜索和保存字符串
设置“_work_x1=pdf”
设置“\u work\u x2=svg”
设置“\u工作\u文件\u str=*.%\u工作\u x1%”
::设置inkscape命令
设置“\u inkscape\u path=D:\InkscapePortable\App\inkscape\”
设置“\u inkscape\u cmd=%\u inkscape\u路径%inkscape.exe”
:====在工作目录中查找文件=====
::DIR最后一个元素的输出是单回车字符。
::在百分比扩展后直接删除回车字符,
::但不能延迟扩展。
pushd“%\u工作目录%”
对于/f“tokens=*”%%A IN('DIR/A:-D/O:N/B%\u work\u file\u str%')DO(
调用:子例程“%%A”
)
邻苯二胺
:====使用INKSCAPE将PDF转换为SVG=====
:子程序
回声。
如果不是[%1]=[](
回显%count%:%1
设置/A计数+=1
开始“/D”%\u work\u dir%”/W“%\u inkscape\u cmd%”--不带gui--文件=“%~n1.%\u work\u x1%”--导出dpi=300--导出普通svg=“%~n1.%\u work\u x2%”
)否则(
回波输出端
)
回声。
后藤:eof
:====INKSCAPE参考=====
::打印inkscape帮助
REM“%\u inkscape\u cmd%--help>”%~dp0\inkscape\u help.txt”
REM“%\u inkscape\u cmd%”——动词列表>“%~dp0\inkscape\u verb\u list.txt”
清理属性:Windows Cmd和PowerShell
我意识到这不是最好的做法
pstoedit -f fig foo.pdf foo.fig
xfig foo.fig
export to svg
#!/bin/bash
#
# Make one PDF per page using PDF toolkit.
# Convert this PDF to SVG using inkscape
#
inputPdf=$1
pageCnt=$(pdftk $inputPdf dump_data | grep NumberOfPages | cut -d " " -f 2)
for i in $(seq 1 $pageCnt); do
echo "converting page $i..."
pdftk ${inputPdf} cat $i output ${inputPdf%%.*}_${i}.pdf
inkscape --without-gui "--file=${inputPdf%%.*}_${i}.pdf" "--export-plain-svg=${inputPdf%%.*}_${i}.svg"
done