J'ai trouvé quelques exemples par le iText auteur qui utilisent l'API Graphics2D et la bibliothèque Apache Batik pour dessiner le SVG dans un fichier PDF.
http://itextpdf.com/examples/iia.php?id=269
http://itextpdf.com/examples/iia.php?id=263
Pour mes fins, je devais prendre une série de SVG et d'en tirer que dans un fichier PDF à une certaine taille et l'emplacement tout en maintenant la nature du vecteur de l'image (pas de pixellisation) . Je voulais contourner le fichier SVG qui semble prévalent dans les fonctions SAXSVGDocumentFactory.createSVGDocument(). J'ai trouvé le message suivant utile pour l'utilisation d'une chaîne de texte SVG au lieu d'un fichier plat.
http://batik.2283329.n4.nabble.com/Parse-SVG-from-String-td3539080.html
Vous devez créer un StringReader de votre chaîne et passez à la méthode que SAXSVGDocumentFactory # createDocument (String, Reader). L'URI que vous transmettez en tant que premier paramètre en tant que chaîne sera l'URI de document de base du document SVG. Cela ne devrait être important que si votre fichier SVG référence des fichiers externes.
Meilleures salutations,
Daniel
Java Source dérivées des exemples iText:
// SVG as a text string.
String svg = "<svg>...</svg>";
// Create the PDF document.
// rootPath is the present working directory path.
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(new File(rootPath + "svg.pdf")));
document.open();
// Add paragraphs to the document...
document.add(new Paragraph("Paragraph 1"));
document.add(new Paragraph(" "));
// Boilerplate for drawing the SVG to the PDF.
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser);
UserAgent userAgent = new UserAgentAdapter();
DocumentLoader loader = new DocumentLoader(userAgent);
BridgeContext ctx = new BridgeContext(userAgent, loader);
ctx.setDynamicState(BridgeContext.DYNAMIC);
GVTBuilder builder = new GVTBuilder();
PdfContentByte cb = writer.getDirectContent();
// Parse the SVG and draw it to the PDF.
Graphics2D g2d = new PdfGraphics2D(cb, 725, 400);
SVGDocument chart = factory.createSVGDocument(rootPath, new StringReader(svg));
GraphicsNode chartGfx = builder.build(ctx, chart);
chartGfx.paint(g2d);
g2d.dispose();
// Add paragraphs to the document...
document.add(new Paragraph("Paragraph 2"));
document.add(new Paragraph(" "));
document.close();
Notez que ce brossera un SVG au format PDF que vous travaillez. Le SVG apparaît comme un calque flottant au-dessus du texte. Je travaille toujours sur le déplacement/mise à l'échelle et le fait de rester en ligne avec le texte, mais j'espère que c'est en dehors de la portée immédiate de la question.
Espérons que cela a été en mesure d'aider.
Vive
EDIT: Je suis en mesure de mettre en œuvre mon svg comme un objet en ligne en utilisant ce qui suit. Les lignes commentées servent à ajouter une bordure rapide pour vérifier le positionnement.
SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(XMLResourceDescriptor.getXMLParserClassName());
UserAgent userAgent = new UserAgentAdapter();
DocumentLoader loader = new DocumentLoader(userAgent);
BridgeContext ctx = new BridgeContext(userAgent, loader);
ctx.setDynamicState(BridgeContext.DYNAMIC);
GVTBuilder builder = new GVTBuilder();
SVGDocument svgDoc = factory.createSVGDocument(rootPath, new StringReader(svg));
PdfTemplate svgTempl = PdfTemplate.createTemplate(writer, Float.parseFloat(svgDoc.getDocumentElement().getAttribute("width")), Float.parseFloat(svgDoc.getDocumentElement().getAttribute("height")));
Graphics2D g2d = new PdfGraphics2D(svgTempl, svgTempl.getWidth(), svgTempl.getHeight());
GraphicsNode chartGfx = builder.build(ctx, svgDoc);
chartGfx.paint(g2d);
g2d.dispose();
Image svgImg = new ImgTemplate(svgTempl);
svgImg.setAlignment(Image.ALIGN_CENTER);
//svgImg.setBorder(Image.BOX);
//svgImg.setBorderColor(new BaseColor(0xff, 0x00, 0x00));
//svgImg.setBorderWidth(1);
document.add(svgImg);
Je reçois une exception quand j'ai essayé votre code, cela ne fonctionne pas pour moi, j'ai lu récemment que eps n'est pas supporté, vous devez le convertir en WMF – Deumber