12
votes

Exporter pdf vers jpg (s) en C #

J'ai besoin d'enregistrer un document PDF d'une page comme une image pour une vignette sur un site Web.

Je joue avec pdfshaparp et je n'ai eu aucune chance.

J'ai essayé ceci: http://www.pdfshaarp.net /wiki/exportimages-sample.ashx?aspxautodeteccookiesupport=1 Mais tout ce qu'il fait est d'extraire les images intégrées dans le fichier PDF qui n'est pas le résultat souhaité.

idées sur la façon de faire cela? Tout le monde connaît une bonne bibliothèque qui peut gérer cela?

Edit: S'il vous plaît laissez-moi savoir pourquoi c'est une si mauvaise question. Si quelqu'un a une bonne solution à cela, ce serait une excellente ressource pour de nombreuses autres personnes. Surtout que les recherches de Google viennent vides.


7 commentaires

Qu'avez-vous essayé en PDFSharp? Il y a un exemple ici: PDFSHARP.NET/WIKI/...


Montrez-nous ce que vous avez essayé. Nous vous aiderons avec cela.


Merci pour les bowvotes! Je n'ai rien essayé sauf l'exemple que vous avez lié qui extrait les images dans le PDF au lieu de rendre le PDF et de la sortie à une image. C'est la raison pour laquelle je demande: je ne vois pas un moyen de le faire dans iTextShaRP ou PDFSharp. J'ai beaucoup googlé et monte les mains vides.


PDFSHARP ne peut pas rendant des fichiers PDF - et c'est ce que vous devez créer une vignette. Ces informations peuvent être trouvées dans la FAQ. Vous avez déjà découvert que Ghostscript peut le faire.


Je n'ai pas répondu, mais je peux voir que c'est une mauvaise question parce qu'elle a été posée à plusieurs reprises avant la recherche de "[pdf] [c #] thumbnails" "vous trouvera 10 résultats.


Dupliqué possible de Créez une vignette PDF avec C #


Assez juste. On dirait que les votes de fermer à cause d'une question en double serait la voie appropriée. J'ai voté pour le fermer comme une dupe de Stackoverflow .Com / Questions / 1255322 / ... .


5 Réponses :


5
votes

Jetez un coup d'œil à Ghostscript. Vous pouvez rendre pdf aux images avec elle.

http://www.mattephraïm.com/ Blog / 2009/01/06 / A-Simple-C-Wrapper-for-GhostScript /


3 commentaires

Fonctionne comme un champion. Je recommande d'obtenir la source. Il est plus facile de suivre et il est également un peu différent de l'exemple sur le blog. La seule chose est que vous devez connaître la largeur / hauteur souhaitée. Je suppose que je vais travailler à déterminer où glaner cette information de.


Je ne suis pas fou de cette solution, autre que le fait que cela fonctionne. Si quelqu'un a une meilleure solution, faites-nous savoir et je vous donnerai la coche.


Quelle était votre solution pour obtenir la taille de la page sur le PDF?



1
votes

(Disclaimer: Je travaille pour Atalasoft et écrit beaucoup de la technologie PDF) Si vous utilisez le PDFDecoder dans Atalasoft DOTIMAGE, Ceci est simple:

public void PdfToJpegThumb(Stream srcStream, int pageNo, int maxDimension, Stream dstStream)
{
    PdfDecoder decoder = new PdfDecoder();
    decoder.Resolution = 96; // reduce default resolution to speed up rendering
    // render page
    using (AtalaImage pdfimage = decoder.read(srcStream, pageNo, null)) {
        Thumbnail tn = new Thumbnail(maxDimension, maxDimension);
        // make a thumbnail image
        using (AtalaImage tnImage = tn.Create(pdfImage)) {
            // save it
            tnImage.Save(dstStream, new JpegEncoder(), null);
        }
    }
}


1 commentaires

Ce serait assez soigné si cela n'a pas coûté plus de 2000 dollars. = P



2
votes

ABCPDF exporte des documents PDF vers JPEG avec C #. Voir: http://www.websupergoo.com/helppdfnet/source /4-Examples/19-Rending.htm


1 commentaires

Je vais jeter un coup d'œil à cela et voyez si c'est plus propre que d'utiliser Ghostscript (il doit être). Merci!



0
votes

J'ai eu ceci depuis quelque part sur le Web - je ne me souviens pas exactement d'où mais ça marche pour moi!
Je viens de le faire dans une belle fonction.

Il utilise les APIS Ghostscript (gsdll32.dll)

Des exemples du paramètre imageFormat sont "JPEG", "TIFF32NC", etc.

    #region GhostScript API functions
    [DllImport("gsdll32.dll", EntryPoint = "gsapi_new_instance")]
    private static extern int CreateAPIInstance(out IntPtr pinstance,
                                            IntPtr caller_handle);

    [DllImport("gsdll32.dll", EntryPoint = "gsapi_init_with_args")]
    private static extern int InitAPI(IntPtr instance, int argc, IntPtr argv);

    [DllImport("gsdll32.dll", EntryPoint = "gsapi_exit")]
    private static extern int ExitAPI(IntPtr instance);

    [DllImport("gsdll32.dll", EntryPoint = "gsapi_delete_instance")]
    private static extern void DeleteAPIInstance(IntPtr instance);
    #endregion

    public bool CreateImage(string inputPath, string outputPath, string imageFormat, int firstPage, int lastPage, int width, int height)
    {
        bool result = false;
        try
        {
            string[] args = GetArgs(inputPath, outputPath, imageFormat, firstPage, lastPage, width, height);
            var argStrHandles = new GCHandle[args.Length];
            var argPtrs = new IntPtr[args.Length];

            // Create a handle for each of the arguments after 
            // they've been converted to an ANSI null terminated
            // string. Then store the pointers for each of the handles
            for (int i = 0; i < args.Length; i++)
            {
                argStrHandles[i] = GCHandle.Alloc(StringToAnsi(args[i]), GCHandleType.Pinned);
                argPtrs[i] = argStrHandles[i].AddrOfPinnedObject();
            }

            // Get a new handle for the array of argument pointers
            var argPtrsHandle = GCHandle.Alloc(argPtrs, GCHandleType.Pinned);

            // Get a pointer to an instance of the GhostScript API 
            // and run the API with the current arguments
            IntPtr gsInstancePtr;
            CreateAPIInstance(out gsInstancePtr, IntPtr.Zero);
            InitAPI(gsInstancePtr, args.Length, argPtrsHandle.AddrOfPinnedObject());

            // Cleanup arguments in memory
            for (int i = 0; i < argStrHandles.Length; i++)
                argStrHandles[i].Free();

            argPtrsHandle.Free();

            // Clear API
            ExitAPI(gsInstancePtr);
            DeleteAPIInstance(gsInstancePtr);

            result = true;
        }
        catch(Exception e)
        {
            throw e;
        }
        return result;
    }


2 commentaires

Sa prise de Mattephraim.com/ Blog / 2009/01/06 / ... . Aussi, vous manquez toutes les méthodes d'assistance telles que 'getargs', etc.


Merci pour la correction



5
votes

Ghostscript est actuellement la norme de facto pour le rendu PDFS. C'est un peu délicat d'envelopper, même en utilisant GhostscriptShaRP.

Jason Morse a écrit un Great C # wrapper pour rendu pdfs en tant que plugin à la source ouverte ImageFeresizing.Net Library .

Si c'est une application ASP.NET, la bibliothèque permet un rendu à la volée. Vous pouvez donc simplement ajouter un querystring pour obtenir la version JPEG / PNG:

/pdfs/letter.pdf?format=jpg&page=2

Vous pouvez également utiliser l'API géré à la place (dans n'importe quel type d'application - non spécifique à ASP.NET)

imagebuilder.current.build ("letter.pdf", "dort.jpg", de nouvelles redondées ("format = jpg; page = 2"));

Le plugin PDFrenderer est sous licence GPL, tout comme GhostScript.


1 commentaires

Je vais vérifier aujourd'hui.