我需要将SVG图形添加到PDF文件中.
是否可以使用iText7?
使用iText5:
BufferedReader in = new BufferedReader(new InputStreamReader(svgUrl.openStream()));
String xmlParser = XMLResourceDescriptor.getXMLParserClassName();
SVGDocument svgDoc = new SAXSVGDocumentFactory(xmlParser).createSVGDocument(null, in);
in.close();
// Try to read embedded height and width
float svgWidth = Float.parseFloat(svgDoc.getDocumentElement().getAttribute("width").replaceAll("[^0-9.,]",""));
float svgHeight = Float.parseFloat(svgDoc.getDocumentElement().getAttribute("height").replaceAll("[^0-9.,]",""));
PdfTemplate svgTempl = PdfTemplate.createTemplate(writer, svgWidth, svgHeight);
Graphics2D g2d = svgTempl.createGraphics(svgWidth,svgHeight);
GraphicsNode chartGfx = (new GVTBuilder()).build(new BridgeContext(new UserAgentAdapter()), svgDoc);
chartGfx.paint(g2d);
g2d.dispose();
Image img = new ImgTemplate(svgTempl);
Run Code Online (Sandbox Code Playgroud)
我发现在下面的页面中: PdfPTable和PdfTemplate
有一种方法可以创建类似于Template的东西:
PdfFormXObject svgTempl = new PdfFormXObject(new Rectangle(svgWidth, svgHeight));
Run Code Online (Sandbox Code Playgroud)
我该如何创建Graphics2D?
关于问题的答案:如何使用iText7将SVG添加到PDF
这是链接点击这里 !
当我使用Sample Java代码时,出现了错误.
错误: com.itextpdf.styledxmlparser.node.impl.jsoup.JsoupXmlParser - 无法映射节点类型:class com.itextpdf.styledxmlparser.jsoup.nodes.XmlDeclaration
可能是导致错误的原因是什么?怎么能避免呢?
依赖关系:
dependencies {
compile 'com.itextpdf:kernel:7.1.2'
compile 'com.itextpdf:io:7.1.2'
compile 'com.itextpdf:layout:7.1.2'
compile 'com.itextpdf:forms:7.1.2'
compile 'com.itextpdf:pdfa:7.1.2'
compile 'com.itextpdf:pdftest:7.1.2'
compile 'com.itextpdf:svg:7.1.2'
//-- pdfHTML --
compile 'com.itextpdf:html2pdf:1.0.0'
//-- Kerning --
compile 'com.itextpdf:typography:1.0.0'
//-- iText 7 License Key Library --
compile 'com.itextpdf:itext-licensekey:2.0.3'
}
Run Code Online (Sandbox Code Playgroud)
示例java代码:
PdfDocument doc = new PdfDocument(
new PdfWriter(new FileOutputStream(new File(".../test.pdf")),new WriterProperties().setCompressionLevel(0)));
doc.addNewPage();
URL svgUrl = null;
svgPath = ".../test.svg";
try{
svgUrl = new URL(svgPath);
}
catch(MalformedURLException mue){...}
if(svgUrl …Run Code Online (Sandbox Code Playgroud)