2017-10-18 8 views
0

J'essaie de générer un fichier SVG dans un fichier PDF. J'ai essayé quelques approches, mais je continue de rencontrer des problèmes.SVG en PDF. Comment?

J'ai utilisé cette source comme référence: Convert SVG to PDF et essayé ce qui suit:

// Save this SVG into a file (required by SVG -> PDF transformation process) 
File svgFile = File.createTempFile("graphic-", ".svg"); 
Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
DOMSource source2 = new DOMSource(svgXmlDoc); 
FileOutputStream fOut = new FileOutputStream(svgFile); 
try { transformer.transform(source2, new StreamResult(fOut)); } 
finally { fOut.close(); } 

// Convert the SVG into PDF 
File outputFile = File.createTempFile("result-", ".pdf"); 
SVGConverter converter = new SVGConverter(); 
converter.setDestinationType(DestinationType.PDF); 
converter.setSources(new String[] { svgFile.toString() }); 
converter.setDst(outputFile); 
converter.execute(); 

je suis tombé sur plusieurs ClassNotFoundExceptions, liés principalement à batik.DOM, ce qui est vraiment étrange, car je peux voir la liste dans les bibliothèques externes.

Ensuite, j'ai essayé d'utiliser iTextG. J'ai suivi le code dans SvgToPdf: https://developers.itextpdf.com/examples/itext-action-second-edition/chapter-15

Mais alors je suis coincé, comme iTextG n'a pas PdfGraphics2D, et cette méthode l'exige.

Une idée sur comment puis-je faire à ce sujet?

Répondre

0

Voici la solution que j'ai trouvée, qui dépend de n'importe quelle bibliothèque.

Le moteur WebKit peut rendre un SVG, donc vous pouvez charger un SVG dans une WebView:

webView.loadUrl(Uri.fromFile(svgFile).toString()); 

WebView a également la possibilité d'imprimer, de sorte que vous pouvez continuer:

// Get a PrintManager instance 
PrintManager printManager = (PrintManager) getActivity() 
     .getSystemService(Context.PRINT_SERVICE); 

// Get a print adapter instance 
PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter(); 

// Create a print job with name and adapter instance 
String jobName = getString(R.string.app_name) + " Document"; 
PrintJob printJob = printManager.print(jobName, printAdapter, 
     new PrintAttributes.Builder().build());