c# - ver - vista previa pdf windows 7 32 bits
Genera una miniatura en PDF(código abierto/gratis) (5)
En cuanto a otras publicaciones para esto, no pude encontrar una solución adecuada para mis necesidades. Intentando obtener la primera página de un documento en formato PDF como una miniatura. Esto se debe ejecutar como una aplicación de servidor, por lo que no desearía escribir un documento en PDF para presentarlo y luego llamar a una tercera aplicación que lea el pdf para generar la imagen en el disco.
doc = new PDFdocument("some.pdf");
page = doc.page(1);
Image image = page.image;
Gracias.
Creo que el paquete de código API de Windows para Microsoft .NET Framework podría hacer el truco más fácil. Lo que sí puede hacer es generar la misma miniatura que Windows Explorer (y esa es la primera página), y puede elegir varios tamaños, que van hasta 1024x1024, por lo que debería ser suficiente. Es bastante simple, simplemente cree ShellObject.FromParsingName (filepath) y encuentre su subclase Thumbnail.
El problema podría ser cuál es tu servidor. Esto funciona en Windows 7, Windows Vista y creo que en Windows Server 2008. Además, Windows Explorer debe poder mostrar miniaturas en esa máquina. La forma más fácil de asegurar eso es instalar Adobe Reader. Si todo esto no es un problema, creo que esta es la forma más elegante.
ACTUALIZACIÓN: Adobe Reader ha dejado de admitir miniaturas en las versiones recientes, por lo que deben usarse sus versiones heredadas.
ACTUALIZACIÓN2: De acuerdo con el comentario de Roberto, todavía puede utilizar la última versión de Adobe Reader si activa la opción de miniaturas en Editar - Preferencias - General.
Descargue PDFLibNet y use el siguiente código
public void ConvertPDFtoJPG(string filename, String dirOut)
{
PDFLibNet.PDFWrapper _pdfDoc = new PDFLibNet.PDFWrapper();
_pdfDoc.LoadPDF(filename);
for (int i = 0; i < _pdfDoc.PageCount; i++)
{
Image img = RenderPage(_pdfDoc, i);
img.Save(Path.Combine(dirOut, string.Format("{0}{1}.jpg", i,DateTime.Now.ToString("mmss"))));
}
_pdfDoc.Dispose();
return;
}
public Image RenderPage(PDFLibNet.PDFWrapper doc, int page)
{
doc.CurrentPage = page + 1;
doc.CurrentX = 0;
doc.CurrentY = 0;
doc.RenderPage(IntPtr.Zero);
// create an image to draw the page into
var buffer = new Bitmap(doc.PageWidth, doc.PageHeight);
doc.ClientBounds = new Rectangle(0, 0, doc.PageWidth, doc.PageHeight);
using (var g = Graphics.FromImage(buffer))
{
var hdc = g.GetHdc();
try
{
doc.DrawPageHDC(hdc);
}
finally
{
g.ReleaseHdc();
}
}
return buffer;
}
Matthew Ephraim lanzó un contenedor de código abierto para Ghostscript que parece que hace lo que quieres y está en C #.
Enlace al código fuente: https://github.com/mephraim/ghostscriptsharp
Enlace a la publicación del blog: http://www.mattephraim.com/blog/2009/01/06/a-simple-c-wrapper-for-ghostscript/
Puede hacer una simple llamada al método GeneratePageThumb para generar una miniatura (o usar GeneratePageThumbs con un número de página de inicio y final para generar miniaturas para varias páginas separadas, con cada página como un archivo de salida independiente), el formato de archivo predeterminado es jpeg pero usted puede cambiarlo, y muchas otras opciones, al usar la llamada alternativa al método GenerateOutput y especificar opciones tales como formato de archivo, tamaño de página, etc.
Solía hacer este tipo de cosas con imagemagick (Convert) hace mucho tiempo. Hay un .Net Wrapper para eso, tal vez vale la pena echarle un vistazo: http://imagemagick.codeplex.com/releases/view/30302
http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx
Esto funciona muy bien Las únicas dependencias son Gsdll32.dll de GhostScript (debe descargar GhostScript por separado para obtener esto, pero no es necesario tener instalado GhostScript en su entorno de producción) y PDFSharp.dll que se incluye en el proyecto.