use*_*541 50 pdf svg batik pdfbox
我想将PDF转换为SVG,请建议一些能够有效执行此操作的库/可执行文件.我使用apache PDFBox和Batik库编写了自己的java程序 -
PDDocument document = PDDocument.load( pdfFile );
DOMImplementation domImpl =
GenericDOMImplementation.getDOMImplementation();
// Create an instance of org.w3c.dom.Document.
String svgNS = "http://www.w3.org/2000/svg";
Document svgDocument = domImpl.createDocument(svgNS, "svg", null);
SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(svgDocument);
ctx.setEmbeddedFontsOn(true);
// Ask the test to render into the SVG Graphics2D implementation.
for(int i = 0 ; i < document.getNumberOfPages() ; i++){
String svgFName = svgDir+"page"+i+".svg";
(new File(svgFName)).createNewFile();
// Create an instance of the SVG Generator.
SVGGraphics2D svgGenerator = new SVGGraphics2D(ctx,false);
Printable page = document.getPrintable(i);
page.print(svgGenerator, document.getPageFormat(i), i);
svgGenerator.stream(svgFName);
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案效果很好但是生成的svg文件的大小很大.(比pdf大很多倍).通过在文本编辑器中查看svg,我已经找到了问题所在.即使字符的字体属性相同,它也会将原始文档中的每个字符都包含在自己的块中.例如,单词hello将显示为6个不同的文本块.有没有办法修复上面的代码?或者请建议另一种更有效的解决方案.
jbe*_*rd4 59
Inkscape也可用于将PDF转换为SVG.它实际上非常擅长这一点,虽然它生成的代码有点臃肿,但至少它似乎没有你在程序中遇到的特定问题.我认为将它直接集成到Java中具有挑战性,但是inkscape为这个功能提供了一个方便的命令行界面,因此访问它的最简单方法可能是通过系统调用.
要使用Inkscape的命令行界面将PDF转换为SVG,请使用:
inkscape -l out.svg in.pdf
Run Code Online (Sandbox Code Playgroud)
然后您可以使用以下方法调用:
Runtime.getRuntime().exec("inkscape -l out.svg in.pdf")
Run Code Online (Sandbox Code Playgroud)
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String%29
我认为exec()是同步的,只有在进程完成后才会返回(虽然我不是100%肯定),所以你应该在那之后只读"out.svg".在任何情况下,谷歌搜索"java系统调用"将提供有关如何正确执行该部分的更多信息.
Koe*_*en. 34
看看pdf2svg:
使用
pdf2svg <input.pdf> <output.svg> [<pdf page no. or "all" >]
Run Code Online (Sandbox Code Playgroud)
使用时all
给出一个文件名%d
(将被页码替换).
pdf2svg input.pdf output_page%d.svg all
Run Code Online (Sandbox Code Playgroud)
有关故障排除,请参阅:http: //www.calcmaster.net/personal_projects/pdf2svg/
pdftocairo
可用于将pdf转换为svg。pdfcairo
是 poppler-utils 的一部分。
例如要转换 pdf 的第二页,可以运行以下命令。
pdftocairo -svg -f 1 -l 1 input.pdf
Run Code Online (Sandbox Code Playgroud)