The name of the element. This is the XML element name. For example, "svg" for the top level
Example
C#
Java
using Leadtools; using Leadtools.Codecs; using Leadtools.Drawing; using Leadtools.Forms.DocumentWriters; using Leadtools.Svg; using Leadtools.Document.Writer; privatestaticvoid SvgDocumentEnumerateElementsExample() { // The source PDF filevar sourceFile = $@"{LEAD_VARS.ImagesDir}\Leadtools.pdf"; var beforeSvgFile = $@"{LEAD_VARS.ImagesDir}\Leadtools_before.svg"; var afterSvgFile = $@"{LEAD_VARS.ImagesDir}\Leadtools_after.svg"; // Assume this is our Virtual Directoryvar virtualDirectory = "http://localhost/leadtools_images/svg/resources"; // Assume this phrysical directory maps to the Virtual Directoryvar physicalDirectory = $@"{LEAD_VARS.ImagesDir}\svg\resources"; if (!Directory.Exists(physicalDirectory)) Directory.CreateDirectory(physicalDirectory); // Our SVG element enumartion callback SvgEnumerateElementsCallback callback = (SvgDocument document, SvgNodeHandle node, object userData) => { if (node.ElementType == SvgElementType.Image) { // Get the hrefvar href = node.GetAttributeValue("xlink:href"); if (!string.IsNullOrEmpty(href)) { // Parse it as data URIvar dataUri = SvgDataUri.Parse(href); // Check if it is a data URIif (dataUri.IsDataUri) { // Yes, create a new file in a virtual directory// Show the dataURI properties Console.WriteLine("Replacing data URI"); Console.WriteLine("Format:" + dataUri.ImageFormat); if (dataUri.MediaLength > 0) Console.WriteLine("Media:" + dataUri.Href.Substring(dataUri.MediaOffset, dataUri.MediaLength)); if (dataUri.CharSetOffset > 0) Console.WriteLine("CharSet:" + dataUri.Href.Substring(dataUri.CharSetOffset, dataUri.CharSetLength)); else Console.WriteLine("CharSet: not set"); Console.WriteLine("IsBase64:" + dataUri.IsBase64); Console.WriteLine("ImageFormat:" + dataUri.ImageFormat); var extension = dataUri.Extension; Console.WriteLine("Extension:" + dataUri.Extension); // Get a file namevar name = Guid.NewGuid().ToString().Replace("-", "") + "." + dataUri.Extension; // Save it// Full physical pathvar filePath = Path.Combine(physicalDirectory, name); dataUri.DecodeToFile(filePath); /* Alternatively you can save the data yourself using this code var data = dataUri.Href.Substring(dataUri.ValueOffset, dataUri.ValueLength); // Save the data var base64String = dataUri.Href.Substring(dataUri.ValueOffset, dataUri.ValueLength); byte[] rawData = Convert.FromBase64String(base64String); // Save it to disk File.WriteAllBytes(filePath, rawData); */// Finally replace the attribute in the image element with the URIvar virtualPath = virtualDirectory + "/" + name; node.SetAttributeValue("xlink:href", virtualPath); } else { Console.WriteLine("Does not contain a valid data URI."); } } } returntrue; }; using (var rasterCodecs = new RasterCodecs()) { // Use 300 DPI when loading document images rasterCodecs.Options.RasterizeDocument.Load.Resolution = 300; // Load the first page as SVGusing (var svg = rasterCodecs.LoadSvg(sourceFile, 1, null) as SvgDocument) { if (!svg.IsFlat) svg.Flat(null); if (!svg.Bounds.IsValid) svg.CalculateBounds(false); // Save this SVG to disk, report the size svg.SaveToFile(beforeSvgFile, null); Console.WriteLine("Before unembedding the image, size is " + new FileInfo(beforeSvgFile).Length); // Now enumerate the elements to replace each embedded image with a URL// Since we are going to modify the SVG, call BeginUpdate/EndUpdate to speed up the process svg.BeginUpdate(); svg.EnumerateElements(new SvgEnumerateOptions { EnumerateDirection = SvgEnumerateDirection.TopToBottom }, callback, null); svg.EndUpdate(); // Save this SVG to disk again, report the size, should be alot smaller since the image are unembedded and stored as external resources svg.SaveToFile(afterSvgFile, null); Console.WriteLine("Before unembedding the image, size is " + new FileInfo(afterSvgFile).Length); } } } staticclass LEAD_VARS { publicconststring ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; }
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.PrintStream; import java.nio.file.FileVisitOption; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.stream.Stream; import org.junit.*; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; importstatic org.junit.Assert.*; import leadtools.*; import leadtools.codecs.*; import leadtools.document.writer.*; import leadtools.svg.*; publicvoid svgDocumentEnumerateElementsExample() { String LEAD_VARS_ImagesDir = "C:\\LEADTOOLS23\\Resources\\Images"; // The source PDF file String srcFilePath = combine(LEAD_VARS_ImagesDir, "Leadtools_pdf.svg"); String beforeSvgFile = combine(LEAD_VARS_ImagesDir, "Leadtools_before.svg"); String afterSvgFile = combine(LEAD_VARS_ImagesDir, "Leadtools_after.svg"); // Assume this is our Virtual Directory String virtualDirectory = "http://localhost/leadtools_images/svg/resources"; // Assume this phrysical directory maps to the Virtual Directory String physicalDirectory = combine(LEAD_VARS_ImagesDir, "svg\\resources"); if (!new File(physicalDirectory).exists()) new File(physicalDirectory).mkdirs(); // Our SVG element enumartion callback SvgEnumerateElementsCallback callback = (SvgDocument document, SvgNodeHandle node, Object userData) -> { if (node.getElementType() == SvgElementType.IMAGE) { // Get the href String href = node.getAttributeValue("xlink:href"); if (!href.isEmpty() || href != null) { // Parse it as data URI SvgDataUri dataUri = SvgDataUri.parse(href); // Check if it is a data URIif (dataUri.isDataUri()) { // Yes, create a new file in a virtual directory// Show the dataURI properties System.out.println("Replacing data URI"); System.out.println("Format:" + dataUri.getImageFormat()); if (dataUri.getMediaLength() > 0) System.out.println( "Media:" + dataUri.getHref().substring(dataUri.getMediaOffset(), dataUri.getMediaLength())); if (dataUri.getCharSetOffset() > 0) System.out.println( "CharSet:" + dataUri.getHref().substring(dataUri.getCharSetOffset(), dataUri.getCharSetLength())); else System.out.println("CharSet: not set"); System.out.println("IsBase64:" + dataUri.isBase64()); System.out.println("ImageFormat:" + dataUri.getImageFormat()); String extension = dataUri.getExtension(); System.out.println("Extension:" + extension); // Get a file name String name = "dstSrcFile" + extension; // Save it// Full physical path String filePath = combine(physicalDirectory, name); dataUri.decodeToFile(filePath); // Finally replace the attribute in the image element with the URI String virtualPath = virtualDirectory + "/" + name; node.setAttributeValue("xlink:href", virtualPath); } else { System.out.println("Does not contain a valid data URI"); } } } returntrue; }; RasterCodecs codecs = new RasterCodecs(); // Use 300 DPI when loading document images codecs.getOptions().getRasterizeDocument().getLoad().setResolution(300); // Load the first page as SVG SvgDocument svgDocument = (SvgDocument) codecs.loadSvg(srcFilePath, 1, null); if (!svgDocument.isFlat()) svgDocument.flat(null); if (!svgDocument.getBounds().isValid()) svgDocument.calculateBounds(false); // Save this SVG to disk, report the size svgDocument.saveToFile(beforeSvgFile, null); System.out.println("Before unembedding the image, size is " + new File(beforeSvgFile).length()); // Now enumerate the elements to replace each embedded image with a URL// Since we are going to modify the SVG, call BeginUpdate/EndUpdate to speed up// the process svgDocument.beginUpdate(); SvgEnumerateOptions svgEnumerateOptions = new SvgEnumerateOptions(); svgEnumerateOptions.setEnumerateDirection(SvgEnumerateDirection.TOP_TO_BOTTOM); svgDocument.enumerateElements(svgEnumerateOptions, callback, null); svgDocument.endUpdate(); // Save this SVG to disk again, report the size, should be alot smaller since// the image are unembedded and stored as external resources svgDocument.saveToFile(afterSvgFile, null); System.out.println("After unembedding the image, size is " + new File(afterSvgFile).length()); assertTrue(new File(afterSvgFile).length() != new File(beforeSvgFile).length()); }