[mapguide-users] How to prepare unmanaged DWF Drawingsource?

Carl carlshe at 163.com
Thu Oct 25 14:11:19 EDT 2007


Thank you. I tried your method but can't access the DWF file as a folder.

I seached internet and found another way to get the sheets' names, which is
based on SharpZipLib.

using System.IO;
using ICSharpCode.SharpZipLib.BZip2;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using ICSharpCode.SharpZipLib.GZip;
using System.Xml.XPath;
using System.Xml;

namespace ...
{
    public class DWFFileHelper
    {
        public static XPathDocument GetManifest(string DWFPathFile)
        {
            ZipFile zip = new ZipFile(fileName);
            ZipEntry manifest = zip.GetEntry("manifest.xml");
            return new XPathDocument(zip.GetInputStream(manifest));
        }

        public static string[] Get2DSheetName(string DWFPathFile)
        {
            ZipFile zip = new ZipFile(DWFPathFile);
            ZipEntry manifest = zip.GetEntry("manifest.xml");
            XPathDocument xpd= new
XPathDocument(zip.GetInputStream(manifest));
            XPathNavigator nav = reader.CreateNavigator();
            XmlNamespaceManager xnm = new
XmlNamespaceManager(nav.NameTable);
            xnm.AddNamespace("dwf", "DWF-Manifest:6.0");
            XPathNodeIterator nodes =
nav.Select("/dwf:Manifest/dwf:Sections/dwf:Section/dwf:Toc/dwf:Resource[@dwf:role='2d
streaming graphics']/../../@name", xnm);

            if (nodes.Count >0)
            {
                string[] ss=new string[nodes.Count];
                int index = 0;
                while (nodes.MoveNext())
                {
                    ss[0] = nodes.Current.Value;
                    index++;
                }
                return ss;
            }
            else
                return null;
        }
    }
}



Brad L wrote:
> 
> I use the file system to get the name of the folder in the unzipped dwf. 
> The folder name is the same as the sheet attribute you need.
> 
> here is a function in VB to get the Name of the folder.  It should be easy
> to convert to C# or just drop it in your appcode folder as VB code.
> 
> Public Function get_sheet(ByVal resourceName As String) As String
>         Dim folderlocation As String =
> ConfigurationManager.AppSettings("dwfpath") & resourceName & "\"
>         Dim dirinfo As DirectoryInfo
>         Dim myName As String = ""
>         For Each dir As String In Directory.GetDirectories(folderlocation)
>             dirinfo = New DirectoryInfo(dir)
>             myName = dirinfo.Name
>         Next
>         Return myName
>     End Function
> 
> After you have the sheet name you use DOM to replace it in the
> drawingsource and layersource template files or just build the XML
> document in memory.  Then you can add these to your repository.
> 
> There are 1000 ways to skin this cat.  You could find a second party .Net
> class that works with zip files or use the windows API to work with them
> or take the easy way out as I did and unzip them all to a second directory
> and work with it that way.  Whatever route you choose the information you
> need is contained inside the dwf and the dwf is just a zip file (replace
> .dwf with .zip and have a look).
> 
> Brad Leighninger
> Mathews & Associates, Inc
> 417-869-6009
> 
> 
> Carl wrote:
>> 
>> Thank you very much.
>> 
>> It's ok to left the 0 to range coordinates(miin/max Values). 
>> 
>> Could you please tell me how do you extract the sheet name by program
>> automatically, for example in c#, but not mannaully.
>> 
>> Could somebody post an example to demo the process to get the coordinates
>> of sheet ranges?
>> 
>> 
>> 
>> 
>> Brad L wrote:
>>> 
>>> I am using unmanaged DWF files but I build all of my maps dynamically at
>>> runtime.  I don't know if this makes things more or less difficult for
>>> your situation but I will give you the short version of my process.
>>> 
>>> The XML for your dwf layer will look something like this.  
>>> 
>>> <?xml version="1.0" encoding="utf-8"?>
>>> <DrawingSource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>>> xsi:noNamespaceSchemaLocation="DrawingSource-1.0.0.xsd">
>>>   <SourceName>C:\Pathtodwfonserver\mydwf.dwf</SourceName>
>>>   <CoordinateSpace>LOCAL_CS["Non-Earth (IInch)",LOCAL_DATUM["Local
>>> Datum",0],UNIT["IInch",
>>> 0.0254],AXIS["X",EAST],AXIS["Y",NORTH]]</CoordinateSpace>
>>>   <Sheet>
>>>     <Name>com.autodesk.dwf.ePlot_94A374353C9B4FBB02843AF1AC24E437</Name>
>>>     <Extent>
>>>       <MinX>0</MinX>
>>>       <MinY>0</MinY>
>>>       <MaxX>0</MaxX>
>>>       <MaxY>0</MaxY>
>>>     </Extent>
>>>   </Sheet>
>>> </DrawingSource>
>>> 
>>> Put in the physical path to your unmanaged dwf as the SourceName, change
>>> your coordinate space to the correct system, and put in the coordinates
>>> (I have left them all at 0 and it seems to work).  The Sheet->Name comes
>>> from the dwf itself.  If you unzip the dwf you will see this info as the
>>> folder name and in the xml files.  You can also get the template for
>>> this by saving the managed dwf as XML.
>>> 
>>> The Layer XML for this dwf would look like this:
>>> 
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> 
>>> <LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> xsi:noNamespaceSchemaLocation="LayerDefinition-1.1.0.xsd"
>>> version="1.1.0">
>>>  <DrawingLayerDefinition>
>>>   <ResourceId>Session:SessionID//mydwf.DrawingSource</ResourceId>
>>>   <Sheet>com.autodesk.dwf.ePlot_94A374353C9B4FBB02843AF1AC24E437</Sheet>
>>>  </DrawingLayerDefinition>
>>> </LayerDefinition>
>>> 
>>>  Where the ResourceID references the above drawingsource and the sheet
>>> is the same as the Sheet->Name above.
>>> 
>>> As I said, I add these resources to the session repository at run time
>>> but you should be able to save these resources to the library as well.
>>> 
>>> Hope that helps
>>> 
>>> Brad Leighninger
>>> Mathews & Associates, Inc
>>> 417-869-6009
>>> 
>>> 
>>> Carl wrote:
>>>> 
>>>> Sorry, I haven't.
>>>> 
>>>> 
>>>> btenbroeck wrote:
>>>>> 
>>>>> Carl, did you ever find/get a solution to this?
>>>>> 
>>>>> 
>>>>> Carl wrote:
>>>>>> 
>>>>>> It is ok to publish the unmanaged SDF file. but how to prepare
>>>>>> unmanaged DWF Drawingsource? It seems more complicated than SDF.
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>> 
>>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/How-to-prepare-unmanaged-DWF-Drawingsource--tf4529186s16610.html#a13412767
Sent from the MapGuide Users mailing list archive at Nabble.com.



More information about the mapguide-users mailing list