Escenario
- Existen documentos en formato PDF que tienen códigos QR
- Necesitamos detectar el código QR en esos documentos
- Mover los archivos PDF a otras carpetas
- Actualizar datos en un SQL Server que luego será consultado vía MS Access
Enfoque de la solución
Crearemos un programa en .Net que efectúe dos tareas principales:
- Convertir el PDF a PNG
- Detectar el QR dentro del PNG
Para ello trabajamos con dos librerías
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ZXing;
using GhostscriptSharp;
using GhostscriptSharp.Settings;
namespace PRUEBA
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
// Obtener la imagen de la primera página del PDF
GhostscriptWrapper.GenerateOutput("documento.pdf", "documento.png",
new GhostscriptSettings
{
Device = GhostscriptDevices.pngalpha,
Page = new GhostscriptPages
{
Start = 1,
End = 1,
AllPages = false
},
Resolution = new Size
{
Height = 72,
Width = 72
},
Size = new GhostscriptPageSize
{
Native = GhostscriptPageSizes.letter
}
}
);
// Detectar el QR en el PDF
IBarcodeReader reader = new BarcodeReader();
var barcodeBitmap = (Bitmap)Bitmap.FromFile("documento.png");
var result = reader.Decode(barcodeBitmap);
if (result != null)
{
//label1.Text = result.BarcodeFormat.ToString();
label1.Text = result.Text;
}
button1.Enabled = true;
}
}
}
Nota: si tienen problemas para capturar los códigos, pueden variar la resolución, por ejemplo:
Resolution = new Size
{
Height = 300,
Width = 300
},
El resultado
Creamos un documento de ejemplo en PDF como este:
Ejecutamos la aplicación
Y obtenemos el resultado
En el camino, el programa debió haber generado un "documento.png"
Links de interés