USO DE IRONSECUREDOC

immich Docker Compose (Cómo funciona para los desarrolladores)

Publicado en 14 de enero, 2025
Compartir:

Introducción

ImmichDocker es la configuración de Immich, uncódigo abierto, solución de respaldo de fotos y videos autohospedada dentro de un contenedor Docker. Docker es una plataforma ligera y ampliamente adoptada para desarrollar, distribuir y ejecutar aplicaciones con servidores tanto físicos como virtualizados. Gracias a Docker, Immich se puede instalar fácilmente en la mayoría de los sistemas y estar operativo sin configuraciones complejas ni dolores de cabeza relacionados con las dependencias. Este enfoque contenedorizado para gestionar Immich lo hace más fácil, permitiendo a los usuarios almacenar, hacer copias de seguridad y gestionar sus archivos multimedia de manera segura.

Además, Docker garantiza la consistencia en diferentes entornos, por lo que los usuarios pueden mover o escalar su instancia de Immich con mínima dificultad. Esto significa que Immich Docker presentaría las formas más eficientes y fluidas en las que cualquiera que espere alojar su propia solución de respaldo de medios habría hecho utilizando Docker.

Imagen rota Añadir desde Pixabay, seleccionar de tus archivos o arrastrar y soltar una imagen aquí.

Características de Immich

La instalación de Immich Docker incluye varias funciones listas para usar que facilitan enormemente el despliegue y la gestión de la solución de copia de seguridad de fotos y videos de Immich. Esto, a su vez, lo hace bastante atractivo para aquellos que autoalojarán sus archivos multimedia de manera segura y efectiva. Entre las características principales de Immich Docker se encuentran las siguientes:

Fácil de implementar: Immich Docker ha proporcionado imágenes Docker estándar, lo que facilita la implementación. Además, mantiene a los usuarios alejados de paquetes dependientes y configuraciones complicadas; así, los usuarios pueden desplegar Immich inmediatamente.

Multiplataforma: Cada contenedor de Docker asegura que el dispositivo pueda ejecutarse en la mayoría de los sistemas con Docker en Linux, macOS y Windows OS. Eso hace que el proyecto sea altamente portátil entre diferentes entornos.

Aislamiento: Además, los servicios de Immich que se ejecutan en el contenedor de Docker se mantendrían aislados de otras aplicaciones y servicios en la máquina host. Esto reduciría conflictos, problemas de compatibilidad y definitivamente haría que el entorno operativo sea mucho más estable para Immich.

En general, la escalabilidad es muy fácil, sobre todo cuando se manejan grandes volúmenes de datos multimedia para el despliegue de usuarios de Immich Docker. Dado que Docker es inherentemente escalable, actualizar o aumentar recursos puede ser bastante sencillo.

Seguridad: La razón es que los contenedores de Docker introducen una capa de sandboxing que se aleja del sistema subyacente, proporcionando seguridad adicional. Además de esto, el autoalojamiento de Immich ofrece la posibilidad de permitir a los usuarios tener control total sobre sus datos y la ubicación de almacenamiento de la base de datos, lo que incrementa la privacidad y la seguridad.

Actualizaciones Automáticas: Los contenedores son relativamente ligeros, fáciles de actualizar y fáciles de mantener; así, los usuarios de Docker pueden cambiar fácilmente a nuevas funciones con los últimos parches de seguridad con muy pocas o ninguna interrupción.

Copia de seguridad y restauración: Immich Docker crea una fuente única de verdad cuando se trata de hacer copias de seguridad de medios para poder restaurar fotos y videos. Docker se asegura de que todos los despliegues tengan los mismos datos.

Personalizable: Immich es autohospedado, por lo que los usuarios pueden modificarlo según sus requisitos para una integración más efectiva con otros servicios y opciones de escalado.

Soporte de la Comunidad: Es un proyecto de código abierto; por lo tanto, la comunidad proporciona mejora continua, corrección de errores y soporte a sus usuarios.

Instalar Immich Docker

Requisitos previos

  • Instala Docker y Docker Compose en tu sistema.
  • Asegúrese de que su máquina tenga suficientes recursos: se recomiendan 4 GB o más de RAM.

Clonar el repositorio de Immich

Descargue el archivo docker-compose de Git Hub.

git clone https://github.com/immich-app/immich.git
cd immich
git clone https://github.com/immich-app/immich.git
cd immich
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'git clone https: cd immich
VB   C#

Configurar variables de entorno

Para modificarlo, haz una copia del archivo de entorno de muestra y de los archivos docker-compose.yml:

cp .env.example .env
cp .env.example .env
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'cp.env.example.env
VB   C#

Abre el archivo .env y configura las variables.(tales como el puerto, el nombre del archivo de entorno de ubicación de almacenamiento y las credenciales de la base de datos). En la mayoría de las configuraciones, los ajustes predeterminados son suficientes.

# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
# The location where your uploaded files are stored
UPLOAD_LOCATION=./library
# The location where your database files are stored
DB_DATA_LOCATION=./postgres
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC
# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release
# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=postgres
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=postgres
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
# The location where your uploaded files are stored
UPLOAD_LOCATION=./library
# The location where your database files are stored
DB_DATA_LOCATION=./postgres
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC
# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release
# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=postgres
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=postgres
#You can find documentation for all the supported env variables at https: 'immich.app/docs/install/environment-variables
#The location where your uploaded files are stored
#The location where your database files are stored
#To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https: 'en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
#TZ=Etc/UTC
#The Immich version to use. You can pin this to a specific version like "v1.71.0"
#Connection secret for postgres. You should change it to a random password
#Please use only the characters `A-Za-z0-9`, without special characters or spaces
#The values below this line do not need to be changed
###################################################################################
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'UPLOAD_LOCATION=./library DB_DATA_LOCATION=./postgres IMMICH_VERSION=release DB_PASSWORD=postgres DB_USERNAME=postgres DB_DATABASE_NAME=postgres
VB   C#

Lanzar Immich

Utilice Docker Compose para iniciar el servidor Immich:

docker-compose up -d
docker-compose up -d
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'docker-compose up -d
VB   C#

Docker Compose de Immich (Cómo funciona para desarrolladores): Figura 2 - Ejecutar servidor de Immich

Este comando descarga todas las imágenes requeridas y inicia los contenedores necesarios:

  • Backend
  • Frontend
  • Base de datos(PostgreSQL)
  • Redis(para almacenamiento en caché)
  • Modelos de aprendizaje automático(para funciones como el reconocimiento facial)

    inmich Docker Compose(Cómo funciona para desarrolladores): Figura 3 - Comando de Docker Compose

Accede a Immich en tu navegador

Cuando todos los archivos estén descargados, asegúrate de reiniciar el entorno. Una vez que los contenedores estén en funcionamiento, abra el navegador e ingrese el siguiente enlace.

http://localhost:2283
http://localhost:2283
http: 'localhost:2283
VB   C#

Reemplace los puertos de entorno con 2283 con el puerto especificado si ha alterado el puerto en el archivo .env.

Crear o Iniciar sesión en cuenta Immich

Primer uso: cuando accedas por primera vez a la URL de Immich, se mostrará la interfaz web.

Docker Compose de Immich (Cómo funciona para desarrolladores): Figura 4 - Immich

Se te pedirá que crees una cuenta de administrador.

Docker Compose de immich (Cómo funciona para desarrolladores): Figura 5 - Cuenta de administrador

Complete la información requerida, e Immich le guiará a través de la configuración.

Docker Compose de immich (Cómo funciona para desarrolladores): Figura 6 - Configuración

Configurar Immich en la Interfaz Web

  • Configuración: Accede a la configuración detallada de Immich a través del panel de administración.
  • Subir medios: Ahora sube algunas fotos/videos para probar.
  • Explora características: Disfruta de otras características como la detección facial, el etiquetado de objetos, etc.

    inmich Docker Compose(Cómo funciona para desarrolladores): Figura 7 - Interfaz web

    Una vez configurado, podrás acceder a Immich directamente desde tu navegador y comenzar con la gestión de tu biblioteca de fotos y videos.

¿Qué es IronSecureDoc?

IronSecureDoces una utilidad avanzada para la gestión y seguridad de documentos, que ofrece un cifrado robusto, manipulación avanzada de PDF y firma digital. Ofrece a las empresas y desarrolladores confidencialidad e integridad de documentos, junto con un acceso fluido, y por lo tanto, simplifica el procesamiento de documentos PDF. También se puede llamar una API de PDF agresiva en casos donde sus características permiten a los desarrolladores crear, cargar, manipular y asegurar archivos y documentos PDF de manera programática.

inmich Docker Compose(Cómo funciona para desarrolladores): Figura 8 - IronSecureDoc: El servidor de seguridad y cumplimiento de PDF

Aparte de eso, IronPDF es una API de PDF que permite la creación de PDFs a partir de cualquier entrada de datos, añadiendo y editando contenido con parámetros como texto, imágenes y metadatos. Esto incluye la capacidad de fusionar varios PDFs para componer archivos, dividir documentos e incluso añadir comentarios, resaltar o poner marcas de agua.

Entre sus características de seguridad se encuentran la protección por contraseña, el cifrado AES y los controles de acceso basados en certificados que protegen toda la información y los datos sensibles. Además de esto, permite la firma digital para autenticar documentos y la no repudio, una característica muy importante en industrias como la financiera, médica y legal. La funcionalidad de registro de auditoría permite llevar un seguimiento de todas las actividades realizadas en los documentos para mejorar el cumplimiento y la responsabilidad.

Instalar y ejecutar IronSecureDoc

Obtenga la imagen de Docker de IronSecureDoc desde el repositorio a continuación ejecutando este comando en el Símbolo del sistema o una ventana de terminal abierta.

docker pull ironsoftwareofficial/ironsecuredoc
docker pull ironsoftwareofficial/ironsecuredoc
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'docker pull ironsoftwareofficial/ironsecuredoc
VB   C#

Docker Compose de immich (Cómo funciona para desarrolladores): Figura 9 - Docker Image de IronSecureDoc

Extraeremos una imagen del contenedor de Docker y luego utilizaremos otro comando para iniciar IronSecureDoc, un contenedor en funcionamiento.

docker container run --rm -p 8080:8080 -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> -e ENVIRONMENT=Development -e HTTP_PORTS=8080 ironsoftwareofficial/ironsecuredoc:latest
docker container run --rm -p 8080:8080 -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> -e ENVIRONMENT=Development -e HTTP_PORTS=8080 ironsoftwareofficial/ironsecuredoc:latest
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'docker container run --rm -p 8080:8080 -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> -e ENVIRONMENT=Development -e HTTP_PORTS=8080 ironsoftwareofficial/ironsecuredoc:latest
VB   C#

El comando Docker run anterior iniciará una instancia de contenedor de IronSecureDoc.

Descargue la firma de Immich y agregue el documento PDF firmado

La API REST en IronSecureDoc es una interfaz web moderna que permite a los desarrolladores interactuar de manera segura con las funciones de gestión de documentos y procesamiento de PDF del software. Usando principios RESTful, esteAPIpermite a los usuarios comprender y estandarizar fácilmente la integración de las funcionalidades de IronSecureDoc en sus aplicaciones personalizadas, independientemente de la tecnología utilizada.

inmich Docker Compose(Cómo funciona para desarrolladores): Figura 10 - REST API

Descargar la imagen desde Immich

Docker Compose de immich (Cómo funciona para desarrolladores): Figura 11 - Imagen

Arriba se encuentra el archivo de muestra de la firma que se carga en el Immich.

using System;
using System.Net.Http;
using System.Threading.Tasks;
class ImmichIntegration
{
    private static readonly HttpClient client = new HttpClient();
    public async Task<string> GetImageFromImmich(string imageId, string immichBaseUrl, string apiKey)
    {
        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
        var response = await client.GetAsync($"{immichBaseUrl}/api/media/{imageId}");
        response.EnsureSuccessStatusCode();
        var responseData = await response.Content.ReadAsStringAsync();
        Console.WriteLine("Image data retrieved successfully!");
        return responseData; // Contains image metadata or downloadable URL
    }
}
using System;
using System.Net.Http;
using System.Threading.Tasks;
class ImmichIntegration
{
    private static readonly HttpClient client = new HttpClient();
    public async Task<string> GetImageFromImmich(string imageId, string immichBaseUrl, string apiKey)
    {
        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
        var response = await client.GetAsync($"{immichBaseUrl}/api/media/{imageId}");
        response.EnsureSuccessStatusCode();
        var responseData = await response.Content.ReadAsStringAsync();
        Console.WriteLine("Image data retrieved successfully!");
        return responseData; // Contains image metadata or downloadable URL
    }
}
Imports System
Imports System.Net.Http
Imports System.Threading.Tasks
Friend Class ImmichIntegration
	Private Shared ReadOnly client As New HttpClient()
	Public Async Function GetImageFromImmich(ByVal imageId As String, ByVal immichBaseUrl As String, ByVal apiKey As String) As Task(Of String)
		client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}")
		Dim response = Await client.GetAsync($"{immichBaseUrl}/api/media/{imageId}")
		response.EnsureSuccessStatusCode()
		Dim responseData = Await response.Content.ReadAsStringAsync()
		Console.WriteLine("Image data retrieved successfully!")
		Return responseData ' Contains image metadata or downloadable URL
	End Function
End Class
VB   C#

El código nos permite descargar la imagen del servidor Immich. Asegúrate de generar una clave API desde el servidor Immich.

Subir imagen a IronSecureDoc

using System.IO;
class IronSecureDocIntegration
{
    private static readonly HttpClient client = new HttpClient();
    public async Task UploadImageToIronSecureDoc(string imagePath)
    {
    var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost:8080/v1/document-services/pdfs/sign?sign_specific_page=0&signature_image_x=100&signature_image_y=150&signature_image_w=300&signature_image_h=400&certificate_password=Ibrahim%4021&certificate_permissions=1");
    request.Headers.Add("sec-ch-ua-platform", "\"Windows\"");
    request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36");
    request.Headers.Add("accept", "*/*");
    request.Headers.Add("sec-ch-ua", "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"");
    request.Headers.Add("sec-ch-ua-mobile", "?0");
    request.Headers.Add("Sec-Fetch-Site", "same-origin");
    request.Headers.Add("Sec-Fetch-Mode", "cors");
    request.Headers.Add("Sec-Fetch-Dest", "empty");
    request.Headers.Add("host", "localhost");
    var content = new MultipartFormDataContent();
    content.Add(new StreamContent(File.OpenRead(imagePath)), "signature_image_file", imagePath);
    content.Add(new StreamContent(File.OpenRead("IronsecureDoc.pfx")), "certificate_file", "IronsecureDoc.pfx");
    content.Add(new StreamContent(File.OpenRead("Input.pdf")), "pdf_file", "Input.pdf");
    request.Content = content;
    var response = await client.SendAsync(request);
    response.EnsureSuccessStatusCode();
    //save the file as required
    Console.WriteLine(await response.Content.ReadAsStringAsync());
    }
}
using System.IO;
class IronSecureDocIntegration
{
    private static readonly HttpClient client = new HttpClient();
    public async Task UploadImageToIronSecureDoc(string imagePath)
    {
    var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost:8080/v1/document-services/pdfs/sign?sign_specific_page=0&signature_image_x=100&signature_image_y=150&signature_image_w=300&signature_image_h=400&certificate_password=Ibrahim%4021&certificate_permissions=1");
    request.Headers.Add("sec-ch-ua-platform", "\"Windows\"");
    request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36");
    request.Headers.Add("accept", "*/*");
    request.Headers.Add("sec-ch-ua", "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"");
    request.Headers.Add("sec-ch-ua-mobile", "?0");
    request.Headers.Add("Sec-Fetch-Site", "same-origin");
    request.Headers.Add("Sec-Fetch-Mode", "cors");
    request.Headers.Add("Sec-Fetch-Dest", "empty");
    request.Headers.Add("host", "localhost");
    var content = new MultipartFormDataContent();
    content.Add(new StreamContent(File.OpenRead(imagePath)), "signature_image_file", imagePath);
    content.Add(new StreamContent(File.OpenRead("IronsecureDoc.pfx")), "certificate_file", "IronsecureDoc.pfx");
    content.Add(new StreamContent(File.OpenRead("Input.pdf")), "pdf_file", "Input.pdf");
    request.Content = content;
    var response = await client.SendAsync(request);
    response.EnsureSuccessStatusCode();
    //save the file as required
    Console.WriteLine(await response.Content.ReadAsStringAsync());
    }
}
Imports System.IO
Friend Class IronSecureDocIntegration
	Private Shared ReadOnly client As New HttpClient()
	Public Async Function UploadImageToIronSecureDoc(ByVal imagePath As String) As Task
	Dim request = New HttpRequestMessage(HttpMethod.Post, "http://localhost:8080/v1/document-services/pdfs/sign?sign_specific_page=0&signature_image_x=100&signature_image_y=150&signature_image_w=300&signature_image_h=400&certificate_password=Ibrahim%4021&certificate_permissions=1")
	request.Headers.Add("sec-ch-ua-platform", """Windows""")
	request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36")
	request.Headers.Add("accept", "*/*")
	request.Headers.Add("sec-ch-ua", """Google Chrome"";v=""131"", ""Chromium"";v=""131"", ""Not_A Brand"";v=""24""")
	request.Headers.Add("sec-ch-ua-mobile", "?0")
	request.Headers.Add("Sec-Fetch-Site", "same-origin")
	request.Headers.Add("Sec-Fetch-Mode", "cors")
	request.Headers.Add("Sec-Fetch-Dest", "empty")
	request.Headers.Add("host", "localhost")
	Dim content = New MultipartFormDataContent()
	content.Add(New StreamContent(File.OpenRead(imagePath)), "signature_image_file", imagePath)
	content.Add(New StreamContent(File.OpenRead("IronsecureDoc.pfx")), "certificate_file", "IronsecureDoc.pfx")
	content.Add(New StreamContent(File.OpenRead("Input.pdf")), "pdf_file", "Input.pdf")
	request.Content = content
	Dim response = Await client.SendAsync(request)
	response.EnsureSuccessStatusCode()
	'save the file as required
	Console.WriteLine(Await response.Content.ReadAsStringAsync())
	End Function
End Class
VB   C#

Llamando a Immich y IronSecureDoc

El código a continuación nos ayudará a integrarlo.

class Integration
{
    public async Task IntegrateImmichWithIronSecureDoc(string immichImageId, string immichBaseUrl, string immichApiKey,string imagePath)
    {
        var immich = new ImmichIntegration();
        var ironSecureDoc = new IronSecureDocIntegration();
        // Step 1: Fetch image metadata or download from Immich
        string imageData = await immich.GetImageFromImmich(immichImageId, immichBaseUrl, immichApiKey);
        // Step 2: Optionally download the image locally using imageData URL (not shown here)
        // Assume imagePath is the downloaded image file path
        // Step 3: Upload the image to IronSecureDoc
        await ironSecureDoc.UploadImageToIronSecureDoc(imagePath);
    }
}
class Integration
{
    public async Task IntegrateImmichWithIronSecureDoc(string immichImageId, string immichBaseUrl, string immichApiKey,string imagePath)
    {
        var immich = new ImmichIntegration();
        var ironSecureDoc = new IronSecureDocIntegration();
        // Step 1: Fetch image metadata or download from Immich
        string imageData = await immich.GetImageFromImmich(immichImageId, immichBaseUrl, immichApiKey);
        // Step 2: Optionally download the image locally using imageData URL (not shown here)
        // Assume imagePath is the downloaded image file path
        // Step 3: Upload the image to IronSecureDoc
        await ironSecureDoc.UploadImageToIronSecureDoc(imagePath);
    }
}
Friend Class Integration
	Public Async Function IntegrateImmichWithIronSecureDoc(ByVal immichImageId As String, ByVal immichBaseUrl As String, ByVal immichApiKey As String, ByVal imagePath As String) As Task
		Dim immich = New ImmichIntegration()
		Dim ironSecureDoc = New IronSecureDocIntegration()
		' Step 1: Fetch image metadata or download from Immich
		Dim imageData As String = Await immich.GetImageFromImmich(immichImageId, immichBaseUrl, immichApiKey)
		' Step 2: Optionally download the image locally using imageData URL (not shown here)
		' Assume imagePath is the downloaded image file path
		' Step 3: Upload the image to IronSecureDoc
		Await ironSecureDoc.UploadImageToIronSecureDoc(imagePath)
	End Function
End Class
VB   C#

Utilice la API de IronSecureDoc para adjuntar fotos y aplicar firmas digitales. Agrega la llamada a la API necesaria en la clase IronSecureDocIntegration para completar el documento. A continuación se muestra el ejemplo de PDF generado por IronSecureDoc después de agregar la firma.

Docker Compose de immich (Cómo funciona para desarrolladores): Figura 12 - Salida PDF

Conclusión

Aunque tanto Immich como IronSecureDoc hacen un gran trabajo al responder a necesidades específicas, sirven mejor a diferentes casos de uso. Immich se destaca en la gestión de fotos y videos con muchas funciones autohospedadas, como el reconocimiento facial, la detección de objetos y la organización simplificada de archivos multimedia. Será ideal para la gestión de ubicación de almacenamiento personal o a pequeña escala, donde se desee una solución adaptada exactamente a sus necesidades.

IronSecureDoc es una solución de documentos seguros y firma a nivel organizativo que integra los fantásticos beneficios del cifrado avanzado con la simplicidad de integrar el flujo de trabajo para permitir que la seguridad, escalabilidad y manejo de documentos de grado profesional se unan.

Fiable y compatible: Dado que ofrece capacidades de auditoría completas con una fuerte seguridad, es fiable y compatible. Mediante el uso de la API REST de IronSecureDoc, los desarrolladores de sistemas web, móviles y corporativos ahora pueden integrar fácilmente la impresión segura y un manejo eficiente del formato PDF con sus aplicaciones. Para obtener más información sobre la licencia de IronSecureDoc, consulte el página de licencias. Para obtener más información sobre las ofertas de Iron Software, visite el Página de IronSuite.

SIGUIENTE >
Haproxy Docker Compose (Cómo funciona para desarrolladores)