元數據是提供有關實際數據的信息的數據。它通常被描述為“關於數據的數據”。向某人發送文件時,一起發送元數據不是一個好習慣。它可以向接收者洩露您可能不想共享的信息。一些例子包括;姓名、公司名稱、文檔修改日期、相機品牌和型號等。在本文中,我們將使用 Java 以編程方式從圖像和文檔中刪除元數據。

Java 元數據清理器 API

GroupDocs.Metadata for Java 是一個用於 Java 的元數據 API,支持大多數流行的元數據標準,如 EXIF、XMP、IPTC、ID3 標籤等。它允許 Java 開發人員添加、修改、提取和刪除元數據從大量 支持的格式 文檔、圖像和其他文件中選擇各種選項。

本文中的步驟和代碼示例使用 GroupDocs.Metadata API。因此,在繼續之前,請確保使用以下任一選項準備開發環境:

  • downloads 部分獲取 JAR 文件。
  • 在基於 Maven 的 java 應用程序中添加以下 pom.xml 配置
<repository>
	<id>GroupDocsJavaAPI</id>
	<name>GroupDocs Java API</name>
	<url>http://repository.groupdocs.com/repo/</url>
</repository>
<dependency>
        <groupId>com.groupdocs</groupId>
        <artifactId>groupdocs-metadata</artifactId>
        <version>20.11</version> 
</dependency>

使用 Java 從文檔中刪除元數據

要在不應用任何過濾器的情況下刪除所有可用的元數據屬性,並在 COVID-19 時代保持安全,請使用 sanitize 方法。以下是使用 GroupDocs.Metadata for Java 從文檔中刪除元數據的步驟。

  • 實例化 Metadata 類的對象,將目標文檔的路徑作為參數傳遞。
  • 調用 sanitize 方法。它返回已刪除的元數據屬性的數量。
  • 使用 save 方法保存已清除元數據的輸出文件。

以下 Java 代碼示例顯示瞭如何從文檔中移除和清除元數據。

/*
* 從 Word、Excel、 
* PowerPoint, PDF 和其他使用 Java 的文檔
*/
Metadata metadata = new Metadata("filePath/document.pdf");
int affected = metadata.sanitize();
metadata.save("filePath/output.pdf"); // Save the output document with no metadata 

使用 Java 從圖像中刪除元數據

如果您想使用 Java 從圖像中刪除所有元數據,您可以按照相同的步驟使用相同的清理方法:

  • 創建 Metadata 類的對象,將目標文檔路徑作為參數傳遞。
  • 調用 sanitize 方法。
  • 使用 save 方法保存輸出文件。
/*
* 從 JPEG、PNG、
* WebP、BMP、GIF、TIFF等圖像使用Java
*/
Metadata metadata = new Metadata("filePath/document.jpg");
int affected = metadata.sanitize();
metadata.save("filePath/output.jpg"); // Save the output image having no metadata

使用 Java 從文檔和圖像中刪除選擇性元數據

並不總是需要從文件中刪除所有可用的元數據,但是,我們有時希望刪除選擇性元數據屬性。以下步驟顯示如何使用屬性的特定名稱定位和刪除元數據。

  • 創建 Metadata 對像以加載目標文檔或圖像文件。
  • 創建個性化規範以查找元數據屬性。
  • 調用 removeProperties 方法並傳遞個性化規範。
  • 使用 save 方法保存輸出文件。
// 使用 Java 從滿足自定義過濾器的文檔和圖像中刪除元數據屬性
public class RemoveMetadataProperties {
	public static void removeMetadataProperties() {
		Metadata metadata = new Metadata("filePath/document.docx");
		/*
		 * 刪除所有屬性: 
		 * 包含文檔作者的姓名或
		 * 它指的是最後一個編輯器或 
		 * 屬性值是一個字符串並且等於給定的字符串“GroupDocs”
		 */
		int affected = metadata.removeProperties(new ContainsTagSpecification(Tags.getPerson().getCreator())
				.or(new ContainsTagSpecification(Tags.getPerson().getEditor()))
				.or(new OfTypeSpecification(MetadataPropertyType.String)
						.and(new RemoveMetadataProperties().new WithValueSpecification("GroupDocs"))));

		System.out.println(String.format("Properties removed: %s", affected));

		metadata.save("outputPath/document.docx");
	}

	// 創建個性化規範以過濾元數據屬性
	public class WithValueSpecification extends Specification {
		public WithValueSpecification(Object value) {
			setValue(value);
		}

		public final Object getValue() {
			return auto_Value;
		}

		private void setValue(Object value) {
			auto_Value = value;
		}

		private Object auto_Value;

		public boolean isSatisfiedBy(MetadataProperty candidate) {
			return candidate.getValue().getRawValue().equals(getValue());
		}
	}
}

結論

在本文中,我們學習了使用 Java 從文檔和圖像中清理元數據。現在您可以構建自己的元數據清理器 Java 應用程序。它可以支持從文字處理文檔、電子表格、演示文稿、PDF 文件、圖像、電子郵件、電子書、繪圖、zip 文件等中刪除元數據。您可以從 文檔 中探索有關 Java 元數據 API 的更多信息。

也可以看看