2017-10-18 2 views
0

Ich versuche, eine SVG-Datei in ein PDF auszugeben. Ich habe ein paar Ansätze ausprobiert, aber ich habe immer wieder Probleme.SVG zu PDF. Wie man?

benutzte ich diese Quelle als Referenz: Convert SVG to PDF und versuchte, die folgenden:

// 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(); 

lief ich in mehrere ClassNotFoundExceptions, meist zu batik.DOM bezogen, was wirklich seltsam ist, da ich es aufgeführt sehen in den externen Bibliotheken.

Als nächstes habe ich versucht mit iTextG. Ich folgte dem Code in SvgToPdf: https://developers.itextpdf.com/examples/itext-action-second-edition/chapter-15

Aber dann bleibe ich stecken, da iTextG nicht PdfGraphics2D hat, und diese Methode erfordert es.

Irgendeine Idee, wie kann ich darüber gehen?

Antwort

0

Hier ist die Lösung, die ich am Ende ging, die auf Bibliotheken angewiesen ist.

Die WebKit-Engine kann eine SVG machen, so können Sie eine SVG in eine WebView laden:

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

WebView hat auch die Fähigkeit, Sie können so zu drucken, dann weiter mit:

// 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());