Metadata removal

Metadata: How can one remove metadata from a Pages document? More particularly, In an MS Word/PC environment, documents include metadata you may not want to share. In a legal environment, people typically scrub the document to remove all metadata. Can that be done with Pages documents? How?
Thanks,
John

Totally agree re PDF and metadata. Just take a look at how Google got caught out last year by just such metadata: http://www.theage.com.au/news/biztech/google-exposed-as-anonymous-ebay-critic/20 08/05/30/1211654272331.html?page=fullpage
In this day and age even documents with less rich metadata than the likes of MS Word and WordPerfect poses a risk of unintentional leaks of confidential/sensitive information as soon as they are sent or 'published'.
Note: (additional chortles were heard from the IT community on this) that the submission also exposed an additional embarrassment in that they used MS Word rather than their own Google apps.

Similar Messages

  • Metadata Removal from Microsoft Word file ??

    Any thoughts? I asked a few Mac Genius' and they have no idea. Cannot find anything online either.

    asked a few Mac Genius' and they have no idea.
    Why would they? Word is not made by Apple.
    Post Word related questions on Microsoft's own forums for their Mac software, as Apple discussions only provide support for Apple products:
    http://www.officeformac.com/productforums

  • Removing keyword from multiple images at the same time

    None of the documented methods seem to work for me.
    1     Select all the images. Go to Metadata > Remove Keyword [my keyword] - the keyword is only removed from the image that is selected in the batch - i.e the one that has the yellow border round it to show it's the active image.
    2     Select all the images, enter [my keyword] in the Add Keyword field when Keyword Controls is visible and press Shift + Enter - does the same thing as 1 above (removes it from the active image only).
    3     Select all the images, Shift Click on the keyword that I have in my Keyword Controls in the Control Bar - does the same things as 1 above.
    So all these methods, which are supposed to work, do not work for me. The removal of the keyword is only applied to the image that has the yellow border showing it to be the currently active image in the selected batch - the remaining selected imaged still retain the keyword. I can remove it "one at a a time" but it would be great if I could find a solution as to why this isn't working.
    Any ideas?
    If it helps, I'm running Aperture 3.1.3 in OS X 10.6.8.
    thanks
    Alan

    Based on the frequency with which this trips up users, the Aperture team is going to have to add a much stronger visual indication that "Primary Only" is active.  Marching ants, anyone?  Or a pink selection marquee?
    At least in the Viewer when multiple Images are selected the thin white selection marquee is dropped when Primary Only is active.  There is no such change in the Browser.

  • Metadat

    When converting a Word document to pdf, is more metadata removed by printing to pdf rather than saving to pdf or converting to pdf?

    Printing will theoretically carry over least metadata. However, if you care about not disclosing metadata, you should use the "remove hidden information" and redaction features of Acrobat and not rely on the creation path.

  • Metadata handling in ProxyElement (inconvenient)

    Hello!
    I've come across the inconvenience when working with metadata in ProxyElement.
    1) Every element that is proxied gets ProxyElement metadata values (that have been set before) on permanent basis and not loses it after being unset as a proxied element:
    public function set metadata(value:Metadata):void{
    // Transfer all old values to new: 
    for each (var url:String in proxiedMetadata.keys){
    value.addValue(url, proxiedMetadata.getValue(url));
    proxiedMetadata = value;
    proxiedMetadata.addEventListener(MetadataEvent.VALUE_ADD, redispatchEvent);
    proxiedMetadata.addEventListener(MetadataEvent.VALUE_CHANGE, redispatchEvent);
    proxiedMetadata.addEventListener(MetadataEvent.VALUE_REMOVE, redispatchEvent);
    2) Consumer that is listening for METADATA_ADD of ProxyElement never gets informed of new values appearing in ProxyElement metadata after the proiedElement is set. Look at this code in creating ProxyElement:
    proxy2 = new ProxyElement(); 
    proxy2.addEventListener(MediaElementEvent.METADATA_ADD,
    function(event:MediaElementEvent):void { 
    trace ("METADATA ADDED: " + event.namespaceURL);});
    proxy2.addEventListener(MediaElementEvent.METADATA_ADD,
    function(event:MediaElementEvent):void { 
    trace ("METADATA REMOVED: " + event.namespaceURL);});
    And this, say, button click handler:
     var e:MediaElement = new MediaElement(); 
    if (null == proxy2.getMetadata("META1")) {e.addMetadata(
    "META1", new Metadata());}
    else {e.addMetadata(
    "META2", new Metadata());}
    proxy2.proxiedElement = e;
    METADATA_ADD and METADATA_REMOVED are never called.
    This is particulary inconvenied when using LoadFromDocumentElement. Imagine complex processing of loaded content with adding metadata to it - top level LoadFromDocument will never inform a listener of the addition of proxied metadata when its content is loaded and formed.
    For now I'm using a temporary solution like this:
     override public function set proxiedElement(value:MediaElement):void { 
         super.proxiedElement = value; 
         if (null == value) return; 
         //Copy all proxied metadata 
         var keys:Vector.<String> = value.metadataNamespaceURLs; 
         for each (var key:String in keys) {          addMetadata(key, value.getMetadata(key));
    It does not fire METADATA_REMOVE events but OK for LoadFromDocuments.
    I think it will be great if ProxyMetadata gets somehow rewritten in later releases - or may be I'm not getting a concept of ProxyElement?
    What do you think?
    Thank you!

    Coorection on quick proxy remedy in my first post. The overriden func should look like this:
    override public function set proxiedElement(value:MediaElement):void { 
         super.proxiedElement = value; 
         if (null == value) return; 
         //Dispatch proxied metadata events ;O) 
         var keys:Vector.<String> = value.metadataNamespaceURLs; 
         for each (var key:String in keys) {          metadata.dispatchEvent(
    new MetadataEvent(MetadataEvent.VALUE_ADD, false, false, key, value.getMetadata(key)));     }
    I did not take into account the:
    var oldValue:* = data[key];data[key] = value;
    if (oldValue != value){
    in Metadata code - so resetting values as in my first post does not fire events.
    Worked for me because my own bug :O)

  • Removing user-defined keywords?

    Hi experts...
    I'm not really happy with the out-of-the-box keywords that are in Aperture, so I went into the Keywords HUD and added some of my own (camera type, etc).  Now, I find that I want to remove one of those user-defined keywords from multiple photos in a specific project.
    If I select Metadata-->Remove Keywords, it apparently only gives me the choice to remove the pre-defined keywords.  I do *not* see my user-defined keywords in the list, so I'm struggling with how to remove one keyword from all the photos.
    Any way to do this?

    Do you want to keep the Keyword for other Images?
    If you want to remove the Keyword from your Library, delete it from the Keyword HUD.  It will be removed from every Image to which it is applied.
    If you just want to remove the Keyword from some Images, but keep it in your Library (and maybe applied to other Images), you need to select the Images that have the Keyword applied, then un-apply it.  Here is what I think is the best easy way to do this:
    Filter on that keyword in a container holding the Images from which to remove the Keyword (in your case, the Project).
    Select the Images from which to remove the Keyword (in your case, "Edit→Select All").
    In the "Add Keyword" field of the Control Bar ("d" toggles the Control Bar; "{shift}+d" toggles the Button Sets and the "Add Keyword" field), start to type the Keyword.  It should auto-complete.
    When the Keyword is selected from the autocomplete possibilities, type "{Shift}+{Enter}" (adding {Shift} changes Keyword commands from "add" to "remove").
    All of which is even more simply put in the User Manual.
    I don't shoot stock photos.  I delete the supplied keywords from every Library.
    Message was edited by: Kirby Krieger -- Link added.

  • My Metadata appears to be permanent

    I'm still learning Aperture and trying to develop a work flow for my photography needs. I'm planning to fill in Metadata on every picture I import as I'm starting from scratch on this machine so it only makes sense to. I'm doing some experimenting with Metadata and I am having some issues. I imported a photo as a referenced photo into Aperture and added a single word of Metadata, such as "Test." I then exported the Master to another folder for testing purposes. I then deleted the photo in Aperture along with the original Master file. I then imported the photo into Aperture again from the new location as a referenced photo, deleted the Metadata keyword, then exported the Master file to another location, deleted the referenced file along with the current Master. I then, for testing purposes only, imported the Master (that should have NO KEYWORDS) into Aperture and the keyword was still there. This is impractical as far as a workflow of any sort but the keyword seems like it cannot be deleted once it is typed in.
    Does exporting a Master to a new location export everything including the current Metadata content? It is possible that I'm doing something wrong but I'd like to see how I can add a keyword, export the Master somewhere else, remove the keyword, move the Master again and import the photo as a referenced file with that keyword gone. Why does it appear that I cannot delete the keyword? I've tried simply erasing it, clearing IPTC metadata, removing the keyword from the HUD, etc... and it alway's seems to come back somehow. I want to know that removing the keyword is an option while being able to move lose the original master and import an archived Master without a keyword finding it's way back to the photo. When I export the Master I make sure to click not to export IPTC metadata and it doesn't seem to make a difference.
    Can someone try and duplicate my testing process and see if they can get it to work, it may really help to make things make sense with this app.
    Thanks a ton in advance!!

    i did some more testing today and still seem to have issues, I'll try to explain it a bit simpler.
    I can add some metadata to a picture and export the master with IPTC metadata to another location. I can then import a photo from that new master into Aperture and the metadata will be with it. That works good so far. But...If I erase, or remove the Metadata, export the master to another location with IPTC metadata again, then import the photo from THAT master and the old metadata will come with it even though it was exported with all of the metadata removed. It should have imported with the metadata clear, but it brought metadata from several masters ago. I'm doing this testing to make sure I understand exactly how the metadata system works in Aperture before I start spending tons and tons of time adding it.

  • Remove the App Store update Badge notifications

    How can I remove the App Store update Badge notifications?

    you CAN delete them it has to do with metadata!!  google metadata  removal of notifications and there will be plenty of explanations, Also look it up on youtube, I just finished watching a video on it!!  there are always ways to remove things on any operating system, Just some are easier than others.  if you don't know or only have wrong info to give  then just keep your trap shut!!!! obviously there is a way to go around everything, Hackers have taught sony and the government all about this! (common sense)  so if you don't know move along!!  obviously I'm not advocating hacking, What I am advocating is people in chat rooms judging others or giving misleading info just to mess with others. You don't have anything more important to do than to  try and misguide an innocent until proven guilty user with a question?   Just because they don't want to update an app doesn't mean they are "doing something illegal:"  many apps with updates lose features and  actually makes an app that we use to enjoy very much, now not so great!!   you all know I'm right because anyone with a smartphone has been through this, Do i update or not?  we've all had that question. and as far as apple is concerned,  had everyone "updated" there software last year when they rolled out the new what i like to call SECURITY BREACH update  a lot more than the millions that were already exposed would be  ****** off too!!  Software update for the most part is a good thing, they fix bugs and allow our machines to run smoother, but don't for one moment think that the software updates are without flaws and certainly don't think they "the apps companies" have your best interest in mind!!

  • In Export module, Simple watermark does not appear in my photos

    I make it a habit to always place a simple watermark on all my photos during Export. When i was using LR3 this always worked, but when I recently updated to LR5.2 the Copyright watermark does not show in my photos. I tried several repetitions exporting to .JPEG files, making sure that the Watermarking box is checked. Still, the photos do not show the Copyright symbol and my name.
    What is happening?

    Jim,
    Following your last post lthis is what I did:
    1. In LR5.2, (Library) Export Module, I clicked on the "Export' box
    2. In Export File the following shows:
         Metadata
         Include: All metadata
          "Remove location info" box checked
         Watermarking
         Watermark box at left checked, and selection checked for "simple copyright watermark"
    In the iMac Pictures folder I looked up the exported file and it shows no watermark
    When this same file is uploaded to Flickr, no watermark appears.
    I am wondering if. under metadata, I should select "Simple copyright" instead of "All metadata."

  • Need opinions / benefits of previous experience - PD and external document repository integrations ....

    We are using PD in support of our EA Program. Current efforts have been focused on getting started from a zero base and working on ensuring we have a consistent baseline for the 100(ish) business systems that this effort encompasses. This has largely been an exercise in locating existing (mostly dated) documentation, finding out that there are waaaaay more knowledge gaps than we originally expected, and authoring models to create a common baseline of knowledge aligned with our TOGAF based metamodel/framework. We have been developing baseline models for business areas and systems that encompass business process, application architecture and infrastructure architecture (all at higher levels more appropriate to EA overviews).
    Anyway ..... along the way there have been boatloads of challenges locating documentation that is most often squirelled away in places where only a few people have access or it has been forgotten all-together. One of the next steps we are considering is consolidating and applying some mgmt and governance to the feeder knowledge. This knowledge would NEVER be considered for re-factoring/recreation in EA models and I estimate is about 5000 documents in various formats. I would like to complement the EA Repository (in PD) and our framework with an enterprise knowledge/document mgmt repository.
    Ideally I would like to integrate the two at some level. In my ideal world (where the sun always shines and the people are all pretty!), I would see a document mgmt (DM) system where supporting docs are managed. Some of the classification metadata used in PD is applicable in DM. An integration in PD for pointing to External FIles managed in the DM would be present. PD would have custom scripting to pull/synchronize DM metadata for individual documents.
    I would like to hear if any of you have tried or heard of someone trying to do something similar. If so, how did it turn out?
    A couple notes:
    1. I know that I could try to use PD as a sort of DM. Some work at scripting and creating a few extensions for the DM metadata framework would do the trick in the short term. However, I believe that I should be looking for tools suitable to the job and not try to make PD into something it is definitely not designed for. Unless you have seen an enterprise-scale usage of PD for something like this, I am probably not all that open to this path (that being said I am open to being convinced by strong argument/evidence).
    2. I think this place has some sort of enterprise licensing in place for Documentum so any experiences with that would be particularly interesting.
    Thanks much for any input you might have.
    Bruce

    Hi Bruce,
    As you say yourself It's not a good idea to use PD as a sort of DM.
    Documentum has a tool for automatic classification. Content Intelligence Services. CIS allow to enables automatic classification and categorization of content in the Documentum repository. Its benefit is well organized, classified, and categorized content. With CIS, content is parsed and analyzed and classification rules are applied. The results of the classification can then be used for categorization as keywords to populate content metadata. The capability of automatically creating keywords to populate content metadata remove the burden from end users who otherwise have to do it manually.
    That being said. So in Documentum documents are classified. In PD you can copy / paste the URL in one or more of the following objects fields (Comment, Notes/Description, Notes/Annotation) to the documents in Documentum. So you only have one authoritative source. From models you can double click on the link to go directly to the latest version of the documents in Documentum.
    Do you want to import into the PD clasifications documents, keywords, made ​​in Documentum?
    You say "I would like to complement the EA Repository (in PD) and our framework with an enterprise knowledge/document mgmt repository." Do you think being able to present the results you're looking for? They say a picture is worth a thousand words
    I apologize if I do not understand properly the need.

  • Delete Keyword

    I'm in the Browser & Viewer view and have selected ~50 images, and using the HUD added a keyword via drag/drop. I realized only 49 should have that keyword, how do I delete that single keyword (easily)?
    I'm aware of the Show Keyword Controls, and pressing Shift on a button of that keyword, but this Keyword doesn't have a button created. Is this the only way to delete a single keyword from a single image?
    Thanks

    That only seems to work if I've got the Keyword in as a Button selected.
    Selecting the image, choosing Metadata>Remove Keyword shows a list of the keywords on the buttons below. Again, if I've got it as a button, I can just press shift-button and remove it. My question is for the situation where I don't have a Keyword already on a button.
    Thanks

  • Two Media Folders? Different artwork for screensaver

    Hi all,
    Setup:
    - Macbook Air
    - Yosemite, OS X 10.10
    - iTunes 12.0.1.26
    - External HD
    - Match subscriber
    I have set up iTunes to have my media folder located on a portable hard drive and the library files (.itl, .xml, artwork etc) on the local machine.  I use the iTunes artwork as a screensaver.
    I have spent the past couple of months recovering from a corrupted .itl file.  It wasn't the end of the world, all my media is on an external drive and I am also a Match subscriber, but I took the opportunity to run TuneUp Media over the library as I re-imported it to clean up track metadata, remove duplicates and so forth.
    During this process I have uploaded clean songs to Match and I have downloaded songs that were somehow not in my library after I re-imported the music on my external hard drive.
    For a fair while after doing all this work I noticed that I did not get any artwork for my screensaver if the external hard drive was not plugged in - which I found odd, given the artwork is stored on the local machine (or at least it seems to be).   Then I noticed I had a small amount of artwork showing repetitively on the screensaver... 
    As I investigated this it seems I have two Media folders.  One on the local Macbook and one on the external hard drive.   The media folder on the local macbook contains songs that I have downloaded from iTunes Match as part of cleaning my library and Audiobooks that I have downloaded from Audible and then imported into iTunes.
    If I look for a track that is stored in the media folder on the local machine, and then right-click on that track in iTunes to select "show in finder" it shows me that the media file is located on the External HD.  
    So it appears I files I am downloading from iTunes Match or adding from Safari are now being imported into a local "media" folder and then "consolidated" onto the External HD leaving them in both directories.
    I'd like to not have duplicate data files and I would also like to get my entire iTunes artwork to show in screensaver when I do not have the External HD connected to the machine.
    Does anyone have any advice?

    If you store Album artwork the way i described using Command I (get info) - then the artwork is actually EMBEDDED in each song and is carried with that song wherever it goes.. and in this case it doesnt matter if u had 3 copies of the same album - all identical. You could even save a diff image for each tarck if u wanted.
    If there is no artwork embedded, then coverflow places the image in a separate folder that is only referenced by iTunes for the whole CD.
    You also might want to turn off coverlfow and continue doing what u had been doing in the past - add you won.
    I also think i know what may be happening. You say they are identical except for track 2 - But problem is - I don't think iTunes can handle 2 identical CD's from the same artist.
    Here's an experiment:
    Goto any of the songs.... right-click and select "Show in Finder" the Finder will open and show you the song file and its location. Do you see one album once or 1 album twice?
    If you see 2 of everything, i would recommend the following:
    Rename the first album "December (2002)" and the second "December (2006)" then iTunes will definately separate them out.

  • Photoshop CC is creating problematic JPEGs that make OSX Preview.app lose its mind

    I have a 2013 Retina MBP on Yosemite, with a licensed copy of Photoshop CC. My problem is, Preview cannot deal with JPEGs I am creating in Photoshop. Preview is really sluggish when it loads the images, and is unable to resize them. It appears to do so, but when the image is saved and closed, the resolution is not modified correctly and the file size stays oddly large.
    Here is one such image: https://drive.google.com/file/d/0B1-phaWAfkzjQUxMR3EydDJLM1k/view?usp=sharing
    (make sure you download the full 6.6 MB image, not the thumbnail)
    Something about these JPEGs is making Preview lose its mind, but I'm not sure what it is. Can anyone help? I have also posted to Apple support communities, but I figure that users here may be more knowledgeable about what could be wrong with the file format, etc.

    I see the issue already. You have a metric-ton of metadata you can see in File > Info under Raw data (or Advanced).
    More precisely several pages of this category, something I have never seen in a jpeg.
    <photoshop:DocumentAncestors>
                <rdf:Bag>
                   <rdf:li>0</rdf:li>
                   <rdf:li>000B84DD32F5ABCC8D7B5E8681465EE9</rdf:li>
                   <rdf:li>0013FA92942B6EC5451A4D9D4972AD7E</rdf:li>
    Quicklook is going crazy trying to parse all of this. I don't know where it came from or how important it is, but that's what is happening.
    Compare that against a normal loading jpeg.
    I had to try a Save for Web with the metadata removed (set to none) and it loads and previews normally in Preview.
    Gene

  • OracleDataAdapter returning incorrect schema information

    Hi everyone. I have a very reproducible case where the DataTable schema created by the OracleDataAdapter is incorrect. It is driving me crazy :-).
    ====================
    OracleConnection cnn = new OracleConnection("User ID=XXX;Password=XXX;Data Source=XXX");
    cnn.Open();
    string strQuery = "CREATE TABLE FOO (a INT, b INT)";
    OracleCommand cmdExec = new OracleCommand(strQuery, cnn);
    cmdExec.ExecuteNonQuery();
    OracleCommand cmdQuery = new OracleCommand("SELECT * FROM FOO", cnn);
    OracleDataAdapter adp = new OracleDataAdapter(cmdQuery);
    DataTable dtb = new DataTable();
    adp.Fill(dtb);
    Console.WriteLine("FOO has {0} columns.", dtb.Columns.Count);
    for (int i = 0; i < dtb.Columns.Count; i++)
    Console.WriteLine("{0}th column's name is {1}.", i, dtb.Columns[ i ].ColumnName);
    cmdExec.CommandText = "DROP TABLE FOO";
    cmdExec.ExecuteNonQuery();
    cmdExec.CommandText = "CREATE TABLE FOO (c INT, d INT, e INT)";
    cmdExec.ExecuteNonQuery();
    dtb = new DataTable();
    adp.Fill(dtb);
    Console.WriteLine("FOO has {0} columns.", dtb.Columns.Count);
    for (int i = 0; i < dtb.Columns.Count; i++)
    Console.WriteLine("{0}th column's name is {1}.", i, dtb.Columns[ i ].ColumnName);
    cnn.Close();
    Console.ReadLine();
    =============================
    The console output is:
    FOO has 2 columns.
    0th column's name is A
    1th column's name is B
    FOO has 2 columns.
    0th column's name is A
    1th column's name is B
    But it should be:
    FOO has 3 columns.
    0th column's name is C
    1th column's name is D
    2th column's name is E
    for the second iteration.
    What should I do?
    -- Matt

    I agree with the earlier comment stating '...that the caching is happening inside of the ODP layer rather than a lower layer such as OCI. It looks like the caching is occurring in the m_metaData member of the OracleCommand...'.
    It looks like all of the caching is indeed taking place in ODP. However there is in fact two levels of cache taking place in your particular example - at the OracleCommand level but also deep inside ODP.Net there is a static MetaData class which has a private member m_pooler that maintains a metadata cache on a per connection basis. Basically even if the OracleCommand object entry m_metaData is reset values still appear inside the internal pool and so there need to be removed too - this cache is indexed initially through a hash of the connection details and then statement text. This is why even a new OracleCommand object but with same statement text on same connection also returns incorrect information.
    Within the OracleReader implementations various calls are made to MetaData.Pooler.Get.. calls to retrieve cached information.
    I came across a similar problem (not identical) because we are using the 'alter session set current schema...' command and this causes some problems.
    Basically it appears a base assumption has been made that the definition of object will not change at runtime (which you can understand) but in my case it is possible that 'select * from emp' say could be execute from the same connection but relate to different objects because name resolution has been adjust using the 'alter session...' command which is a big problem.
    I have written some helper routines which enable the internal caches to be 'managed' although it uses some nasty reflection to accomplish this (using private members directly!). It work successfully in my case and I have done a quick change to your example code (added a single call) and it now works, i.e.
    cmdExec.CommandText = "CREATE TABLE FOO (c INT, d INT, e INT)";
    cmdExec.ExecuteNonQuery();
    OracleMetaDataRemover.Remove(cmdQuery, true);
    dtb = new DataTable();
    adp.Fill(dtb);
    If you use the Remove method above and change true to false you will still receive the problem because although the Command has been cleared the details still remain centrally.
    The code which accessed above I include below as is (coded for Oracle 10.1.0.3.01 ODP - it may work on other releases but note this could break in future). Ideally methods are required within ODP to allow cleardown/control of this.
    using System;
    using System.Reflection;
    using System.Collections;
    using Oracle.DataAccess.Client;
    namespace Oracle.DBUtilities
         /// <summary>
         /// Summary description for OracleMetaDataPoolerCleaner.
         /// </summary>
         public class OracleMetaDataPoolerCleaner
              private static string OracleAssemblyShortName = "Oracle.DataAccess";
              private static string OracleMDType = "Oracle.DataAccess.Client.MetaData";
              private static string OraclePoolerType = "Oracle.DataAccess.Client.Pooler";
              // Fast access pointer to internal hash of information
              private Hashtable PooledItems = null;
              private static OracleMetaDataPoolerCleaner _oracleMetaDataPoolerCleanerInstance = null;
              static readonly object _syncRoot = new object();
              private OracleMetaDataPoolerCleaner()
                   Assembly OracleDataAccess = null;
                   // Get hold of the Oracle Data Access assembly
                   Assembly[] LoadedAssemblyList = AppDomain.CurrentDomain.GetAssemblies();
                   for(int i=0; i<LoadedAssemblyList.Length && OracleDataAccess == null; i++)
                        Assembly LoadedAssembly = LoadedAssemblyList;
                        string[] AssemblyNameDetails = LoadedAssembly.FullName.Split(',');
                        if (AssemblyNameDetails[0] == OracleMetaDataPoolerCleaner.OracleAssemblyShortName)
                             OracleDataAccess = LoadedAssembly;
                   // Make sure located details
                   if (OracleDataAccess != null)
                        // Get access to the MetaData cache details
                        Type OracleMetaData = OracleDataAccess.GetType(OracleMetaDataPoolerCleaner.OracleMDType);
                        if (OracleMetaData != null)
                             // Retrieve static pool item
                             FieldInfo f_Pooler = OracleMetaData.GetField("m_pooler", BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Static);
                             if (f_Pooler != null)
                                  // As we cannot get direct access to the object type assume it is OK
                                  object pa = f_Pooler.GetValue(null);
                                  if (pa != null)
                                       Type OraclePooler = OracleDataAccess.GetType(OracleMetaDataPoolerCleaner.OraclePoolerType);
                                       if (OraclePooler != null)
                                            FieldInfo f_Pools = OraclePooler.GetField("Pools", BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Static);
                                            PooledItems = f_Pools.GetValue(pa) as Hashtable;
                                            if (PooledItems == null)
                                                 throw new InvalidOperationException("Unable to initialise metadata cache access...");
              public static OracleMetaDataPoolerCleaner Instance()
                   // Make single copy of this item ready for use
                   if (_oracleMetaDataPoolerCleanerInstance == null)
                        // Thread safe locking and initialisation - 'double-checked lock'
                        lock(_syncRoot)
                             if (_oracleMetaDataPoolerCleanerInstance == null)
                                  _oracleMetaDataPoolerCleanerInstance = new OracleMetaDataPoolerCleaner();
                   return _oracleMetaDataPoolerCleanerInstance;
              /// <summary>
              /// Using reflection the process determines the command text
              /// contents of the specified OracleCommand
              /// Note this could simply have been delegated through to the
              /// OracleConnection version using OCommand.Connection
              /// </summary>
              /// <param name="OCommand">OracleCommand object containing command to be retrieved</param>
              /// <returns>Command string located</returns>
              public static string CommandText(OracleCommand OCommand)
                   string OracleCommandCommandText = null;
                   // Using reflection get direct access to the 'private' member details..
                   Type TypeOracleCommand = OCommand.GetType();
                   FieldInfo FieldInfoCommandText = TypeOracleCommand.GetField("m_commandText", BindingFlags.NonPublic|BindingFlags.Instance);
                   if (FieldInfoCommandText != null)
                        OracleCommandCommandText = FieldInfoCommandText.GetValue(OCommand).ToString();
                   return OracleCommandCommandText;
              /// <summary>
              /// Using reflection the process determines the command text
              /// contents of the specified OracleCommand
              /// </summary>
              /// <param name="OReader">OracleDataReader object containing command to be retrieved</param>
              /// <returns>CommandString located</returns>
              public static string CommandText(OracleDataReader OReader)
                   string OracleDataReaderCommandText = null;
                   // Using reflection get direct access to the 'private' member details..
                   Type TypeOracleDataReader = OReader.GetType();
                   FieldInfo FieldInfoCommandText = TypeOracleDataReader.GetField("m_commandText", BindingFlags.NonPublic|BindingFlags.Instance);
                   if (FieldInfoCommandText != null)
                        OracleDataReaderCommandText = FieldInfoCommandText.GetValue(OReader).ToString();
                   return OracleDataReaderCommandText;
              /// <summary>
              /// Using reflection the process determines the hashvalue
              /// specified OracleConnection
              /// </summary>
              /// <param name="OConnection">OracleConnection for which the HashCode is to be retrieved</param>
              /// <returns>HashValue located or -1</returns>
              public static int ConnectionStringHashValue(OracleConnection OConnection)
                   int HashValue = -1;
                   // Using the Oracle Connection retrieve the hashvalue associated
                   // with this connection
                   if (OConnection != null)
                        Type TypeOracleConnection = OConnection.GetType();
                        FieldInfo f_ConStrHashCode = TypeOracleConnection.GetField("m_conStrHashCode", BindingFlags.NonPublic|BindingFlags.Instance);
                        if (f_ConStrHashCode != null)
                             HashValue = Int32.Parse(f_ConStrHashCode.GetValue(OConnection).ToString());
                   return HashValue;
              /// <summary>
              /// Using reflection the process determines the hashvalue
              /// specified OracleDataReader
              /// </summary>
              /// <param name="OReader">OracleDataReader for which the associated connection HashValue is to be located</param>
              /// <returns>HashValue located or -1</returns>
              public static int ConnectionStringHashValue(OracleDataReader OReader)
                   int HashValue = -1;
                   // Using reflection get direct access to the 'private' member details..
                   Type TypeOracleDataReader = OReader.GetType();
                   FieldInfo f_OraConnection = TypeOracleDataReader.GetField("m_connection", BindingFlags.NonPublic|BindingFlags.Instance);
                   // Ensure have access to a connection and retrieve has information
                   if (f_OraConnection != null)
                        OracleConnection ConnectionValue = f_OraConnection.GetValue(OReader) as OracleConnection;
                        HashValue = OracleMetaDataPoolerCleaner.ConnectionStringHashValue(ConnectionValue);
                   // Return the hashvalue information located
                   return HashValue;
              /// <summary>
              /// Using reflection the process determines the hashvalue
              /// specified OracleCommand
              /// Note this could simply have been delegated through to the
              /// OracleConnection version using OCommand.Connection
              /// </summary>
              /// <param name="OCommand">OracleCommand for which the associated connection HashValue is to be located</param>
              /// <returns>HashValue located or -1</returns>
              public static int ConnectionStringHashValue(OracleCommand OCommand)
                   int HashValue = -1;
                   // Using reflection get direct access to the 'private' member details..
                   Type TypeOracleCommand = OCommand.GetType();
                   FieldInfo f_OraConnection = TypeOracleCommand.GetField("m_connection", BindingFlags.NonPublic|BindingFlags.Instance);
                   // Ensure have access to a connection and retrieve has information
                   if (f_OraConnection != null)
                        OracleConnection ConnectionValue = f_OraConnection.GetValue(OCommand) as OracleConnection;
                        HashValue = OracleMetaDataPoolerCleaner.ConnectionStringHashValue(ConnectionValue);
                   // Return the hashvalue information located
                   return HashValue;
              /// <summary>
              /// Using the supplied OracleDataReader internal calls are made
              /// to determine the ConnectionHash and CommandText details which will
              /// then be used to remove the item
              /// </summary>
              /// <param name="OReader">OracleDataReader to be probed to obtain information</param>
              /// <returns>Indicates whether the item was actually removed from the cache or not</returns>
              public bool Remove(OracleDataReader OReader)
                   bool Removed = false;
                   // Lookup the ConnectionStringHashDetails
                   int HashValue = OracleMetaDataPoolerCleaner.ConnectionStringHashValue(OReader);
                   if (HashValue != -1)
                        // Lookup the command text and remove details
                        string CommandText = OracleMetaDataPoolerCleaner.CommandText(OReader);
                        // Attempt to remove from the cache
                        Removed = this.Remove(HashValue, CommandText);
                   return Removed;
              /// <summary>
              /// Using the supplied OracleCommand internal calls are made
              /// to delegate the call to the OracleConnection version
              /// </summary>
              /// <param name="OCommand">OracleCommand to be probed to obtain information</param>
              /// <returns>Indicates whether the item was actually removed from the cache or not</returns>
              public bool Remove(OracleCommand OCommand)
                   // Call into internal other routine
                   return this.Remove(OCommand.Connection, OCommand.CommandText);
              /// <summary>
              /// Using the supplied OracleConnection internal calls are made
              /// to determine the ConnectionHash and it uses CommandText details
              /// to remove the item
              /// </summary>
              /// <param name="OConnection">OracleConnection from which the cache object should be removed</param>
              /// <param name="CommandText">CommandText to be removed</param>
              /// <returns>Indicates whether the item was actually removed from the cache or not</returns>
              public bool Remove(OracleConnection OConnection, string CommandText)
                   bool Removed = false;
                   // Lookup the ConnectionStringHashDetails
                   int HashValue = OracleMetaDataPoolerCleaner.ConnectionStringHashValue(OConnection);
                   if (HashValue != -1)
                        // Attempt to remove from the cache
                        Removed = this.Remove(HashValue, CommandText);
                   return Removed;
              /// <summary>
              /// Routine actually removes the items from the cache if it exists
              /// </summary>
              /// <param name="ConnectionHashValue">ConnectionHash which is used to key into the Pooled items</param>
              /// <param name="CommandText">CommandText to be removed</param>
              /// <returns>Indicates whether the item was actually removed from the cache or not</returns>
              private bool Remove(int ConnectionHashValue, string CommandText)
                   bool Removed = true;
                   // Retrieve Pooled items for particular hash value
                   Hashtable PoolContents = PooledItems[ConnectionHashValue] as Hashtable;
                   // Remove item if it is contained
                   if (PoolContents.ContainsKey(CommandText))
                        PoolContents.Remove(CommandText);
                        Removed = true;
                   return Removed;
         /// <summary>
         /// Summary description for OracleMetaDataRemover.
         /// </summary>
         public class OracleMetaDataRemover
              private OracleMetaDataRemover()
              /// <summary>
              /// Routine which Removes MetaData associated with OracleCommand object
              /// </summary>
              /// <param name="OCommand">OracleCommand to have associated MetaData removed</param>
              /// <returns>Indicates whether the MetaData associated with the OracleCommand was reset</returns>
              public static bool Remove(OracleCommand OCommand)
                   bool Removed = false;
                   // Retrieve current MetaData values from OCommand
                   Type OracleCommandMetaData = OCommand.GetType();
                   FieldInfo f_metaData = OracleCommandMetaData.GetField("m_metaData", BindingFlags.NonPublic|BindingFlags.Instance);
                   if (f_metaData != null)
                        f_metaData.SetValue(OCommand, null);
                        Removed = true;
                   // Indicate Removed from OCommand object
                   return Removed;
              /// <summary>
              /// Routine which Removes MetaData associated with OracleCommand object
              /// and allows for the removal of information from the internal cache
              /// </summary>
              /// <param name="OCommand">OracleCommand to have associated MetaData removed</param>
              /// <param name="RemoveFromMetaDataPool">Whether item should be removed from the internal metadata pool too</param></param>
              /// <returns>Indicates whether the MetaData associated with the OracleCommand was reset</returns>
              public static bool Remove(OracleCommand OCommand, bool RemoveFromMetaDataPool)
                   bool Removed = false;
                   // Remove details from Command
                   Removed = Remove(OCommand);
                   if (Removed && RemoveFromMetaDataPool)
                        // Remove information form internal cache
                        Removed = OracleMetaDataPoolerCleaner.Instance().Remove(OCommand);
                   // Indicated Removed from OCommand and Internal MetaData collection
                   return Removed;

  • Deleting Multiple Keywords

    OK, once again. I am asking the same question many others have asked. I followed the directions from my search results about deleting multiple keywords at one time. I accidently placed a keyword on 1,000 images.
    I have tried selecting them all, going to the bottom of the window and typing in the keyword, hit shift and enter, and that does NOT work.
    Anyone, ANYONE found a solution yet? I mean, come on. it is a simple mistake, and something that should be written into the program.
    Sheesh.

    Below the window that says "Add Keyword" you have the Keyword Button sets. If that keyword you are trying to remove is not in one of them, go to the last option, Edit Buttons, and add that keyword to one of the sets.
    Now choose the Keyword Button Set with that keyword. Select all the images with that keyword and go to Metadata, Remove Keyword, and click on the keyword.
    Make sure also that you don't have the Primary Only button on, or will affect only the primary image, rather that the whole selection.

Maybe you are looking for