Extraer contenido PDF/X de ZIP en .NET

Utilice Aspose.ZIP for .NET para inspeccionar un archivo ZIP y recuperar únicamente los archivos PDF/X que necesita su aplicación C#. En esta página, extraer significa localizar archivos con la extensión .pdf dentro del contenedor ZIP y guardarlos en un destino controlado. Aspose.ZIP restaura el archivo almacenado, pero no interpreta ni convierte su contenido interno.

La extracción selectiva resulta útil para la ingesta documental, la gestión de expedientes, la automatización de oficina y las colas de conversión. La aplicación puede omitir entradas que no correspondan, aplicar reglas de seguridad y recursos, y entregar los archivos aprobados al siguiente servicio sin descomprimir todo el paquete.

Cómo extraer archivos PDF/X de ZIP con C#

Instale el paquete Aspose.ZIP for .NET e importe el espacio de nombres Aspose.Zip. Los metadatos del archivo comprimido están disponibles antes de escribir nada, de modo que la aplicación puede evaluar ArchiveEntry.Name, ArchiveEntry.IsDirectory y ArchiveEntry.UncompressedSize como parte de sus reglas de aceptación.


Package Manager Console Command

PM> Install-Package Aspose.Zip

Abra el ZIP con Archive, recorra Archive.Entries, seleccione las entradas cuya extensión sea .pdf y llame a ArchiveEntry.Extract para cada destino aprobado. El ejemplo conserva solo el nombre final del archivo, por lo que las rutas incluidas en el ZIP no pueden salir del directorio de destino.

Pasos para extraer archivos PDF/X en C#

  • Resuelva la ruta del ZIP de origen y cree un directorio de salida aislado.
  • Abra el paquete con la clase Archive.
  • Recorra Archive.Entries en lugar de descomprimir todas las entradas.
  • Seleccione los archivos cuyo nombre final utilice la extensión .pdf.
  • Cree una ruta de destino que permanezca dentro del directorio de salida aprobado.
  • Rechace las entradas que superen el límite configurado de tamaño descomprimido.
  • Guarde cada entrada aceptada con ArchiveEntry.Extract.

Requisitos del sistema

Antes de ejecutar el ejemplo, compruebe que el entorno dispone de:

  • Una versión compatible de .NET en Windows, Linux o macOS.
  • Visual Studio, JetBrains Rider, Visual Studio Code u otro entorno de desarrollo para C#.
  • Aspose.ZIP for .NET instalado mediante NuGet o agregado como ensamblado.
  • Permisos de lectura sobre el ZIP de origen y de escritura sobre el directorio de destino.
  • Límites de almacenamiento y tiempo de ejecución adecuados para entradas comprimidas no confiables.

Ejemplo en C#: seleccionar archivos PDF/X de un ZIP

El código abre un paquete ZIP, filtra las entradas que no son directorios por la extensión permitida y guarda los archivos coincidentes en un único directorio de salida. Al descartar las rutas archivadas se evita que segmentos de directorio superiores controlen el destino. En producción también debe definirse una regla determinista para los nombres duplicados.

Extraer archivos PDF/X de ZIP - C#

using Aspose.Zip;
using System;
using System.IO;

string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-pdfx");
string[] allowedExtensions = { ".pdf" };
const ulong MaxEntrySize = 100UL * 1024 * 1024;

Directory.CreateDirectory(outputDirectory);

using (var archive = new Archive(archivePath))
{
    foreach (ArchiveEntry entry in archive.Entries)
    {
        if (entry.IsDirectory) continue;

        string fileName = Path.GetFileName(entry.Name);
        if (string.IsNullOrWhiteSpace(fileName)) continue;

        string extension = Path.GetExtension(fileName);
        if (!Array.Exists(
            allowedExtensions,
            value => string.Equals(value, extension, StringComparison.OrdinalIgnoreCase)))
        {
            continue;
        }

        if (entry.UncompressedSize > MaxEntrySize)
        {
            throw new InvalidDataException(
                $"La entrada '{fileName}' supera el límite de extracción de 100 MB.");
        }

        string destinationPath = Path.Combine(outputDirectory, fileName);
        entry.Extract(destinationPath);
    }
}

Consideraciones de implementación para archivos PDF/X

Que una entrada tenga la extensión esperada solo la convierte en candidata; no demuestra que su contenido sea válido. Valide que el documento sea legible y se ajuste a la variante esperada mediante el componente de procesamiento documental de la siguiente etapa.

El ejemplo aplana las rutas incluidas en el ZIP. Si dos entradas aceptadas tienen el mismo nombre final, ArchiveEntry.Extract puede sobrescribir un archivo existente. Defina una política explícita: rechazar el duplicado, generar un nombre único o conservar una estructura relativa previamente validada. Use un destino independiente para cada tarea para evitar que las solicitudes simultáneas mezclen resultados.

Consideraciones de seguridad y privacidad

Trate los nombres y el contenido del archivo comprimido como datos no confiables. No añada ArchiveEntry.Name directamente a la ruta de destino: una ruta absoluta o segmentos de directorio superior podrían escribir fuera de la carpeta prevista. El ejemplo utiliza Path.GetFileName; si necesita conservar carpetas, resuelva la ruta completa y compruebe que permanezca dentro del directorio raíz aprobado.

Establezca límites para el tamaño comprimido, el tamaño descomprimido por entrada y total, el número de entradas, el tiempo de procesamiento y las tareas simultáneas. Extraiga en almacenamiento temporal con permisos restringidos, elimine resultados parciales tras un error, analice los archivos cuando sea necesario y evite registrar nombres privados o contenido extraído.

Preguntas frecuentes sobre la extracción de PDF/X

¿Cómo extraigo únicamente archivos PDF/X de un ZIP en C#?

Abra el ZIP con Archive, recorra Archive.Entries, filtre por la extensión .pdf y llame a Extract para cada ruta de destino aceptada.

¿Aspose.ZIP valida el contenido del archivo PDF/X extraído?

No. La extensión es solo un primer filtro. El archivo recuperado debe validarse con un componente que comprenda el formato PDF/X.

¿Puedo aplicar el mismo patrón de selección a contenedores 7Z, RAR o TAR?

Sí, pero debe abrir cada contenedor con la clase de archivo correspondiente de Aspose.ZIP. Los tipos de entrada y los métodos de extracción disponibles pueden variar según el formato.

¿Cómo deben gestionarse los nombres de archivo PDF/X duplicados?

Defina la regla antes de extraer: rechazar duplicados, generar nombres únicos o conservar una estructura de carpetas relativa y validada.