2009-07-10 8 views
4

Je cherche un moyen de générer des fichiers PDF en utilisant les classes standard PrintDocument et Graphics (GDI) dans .NET. Pour autant que je sache, la seule façon de le faire est d'imprimer sur une imprimante PDF.Génération de fichiers PDF à partir de .NET à l'aide des classes d'impression standard .NET GDI

Le problème est qu'un pilote d'imprimante PDF demande toujours un nom de fichier, mais j'ai besoin de contrôler le nom de fichier de mon code. L'utilisation d'une bibliothèque PDF comme PDFSharp ou DynamicPDF n'est pas une option, car ils fournissent tous leur propre API pour générer des fichiers PDF.

J'ai besoin de ceci pour une application interne, ainsi les dépendances ne sont pas un problème.

Ma question est simple: existe-t-il un moyen de contrôler un pilote d'imprimante (Adobe Acrobat, PDFCreator, ...) de telle sorte qu'un nom de fichier puisse être spécifié et que l'utilisateur ne soit invité à rien?

Répondre

0

Avez quelques recherches, et bien que je ne l'ai pas encore trouvé une solution parfaite, il y a quelques produits qui installent un pilote d'imprimante PDF et qui vous permettent de un moyen de contrôler le nom du fichier à générer:

Bullzip et PDFCreator sont gratuits.

MISE À JOUR: trouvé un autre qui semble très prometteur:

0

À moins que les pilotes d'imprimante que vous utilisez supportent ceci manuellement (dont il n'existe aucun que je sache), vous devrez écrire votre propre pilote d'imprimante auquel vous seriez capable de transmettre des informations (comme le nom de fichier) pendant l'opération d'impression. Les inconvénients à ceci sont le fait que vous auriez à implémenter un pilote d'imprimante, ainsi que le fait qu'il devrait être du code non managé (vous ne pouvez pas écrire des pilotes dans .NET).

+0

Il y a quelques années, je l'ai lu quelque chose sur l'intégration d'un code de contrôle spécial dans le document imprimé que Adobe Acrobat (Distiller) reconnu pour définir le nom du fichier du fichier PDF à générer. –

-1

Vous ne savez pas si c'est une solution que vous considérez, mais j'ai utilisé iTextSharp pour remplir des formulaires PDF et les enregistrer avec un nom de fichier qui est généré dans le code, pas par l'utilisateur. Il peut également générer des fichiers PDF complets à partir de rien, mais je n'ai pas fait de recherches aussi poussées.

+2

AFAIK, iTextSharp utilise une API personnalisée pour générer des documents PDF, au lieu des méthodes de dessin GDI standard utilisées dans l'impression .NET standard. Comme indiqué dans ma question, ce n'est pas ce que je veux –

0

Plusieurs entreprises créent des outils de conversion de format de document. Plusieurs d'entre eux utilisent des pilotes d'imprimante pour "imprimer" le document dans le format souhaité. Rechercher des outils qui peuvent convertir des documents Word en PDF. L'un d'eux devrait avoir le type de pilote dont vous avez besoin, et certains offriront une API qui vous permettra de contrôler les noms de fichiers et autres.

2

Un produit appelé Amyuni le fait (je l'utilise dans un projet) mais je n'aime pas la licence, vous pouvez vous en sortir.

Voir Amyuni.com

Ryan

+0

J'ai vérifié leur documentation, et il me semble qu'ils utilisent une API personnalisée pour générer des documents PDF, au lieu des méthodes de dessin GDI standard utilisées dans l'impression .NET standard. Comme indiqué dans ma question, ce n'est pas ce que je veux. –

+0

Mon erreur, j'ai raté la partie GDI de votre question. –

4

Le code System.Drawing pour une PrintDocument peut être réutilisé pour générer un fichier PDF avec ABCpdf.NET de webSupergoo. Voir le System.Drawing example pour plus de détails. Le composant n'utilise pas de pilote d'imprimante - il crée directement un fichier PDF - il n'est donc pas nécessaire de spécifier un nom de fichier.

0

Dane-Prairie Systems http://www.win2pdf.com/ semble capturer la chaîne "print to file" à partir des appels GDI et créera votre PDF où vous spec. Voici une citation du manuel:

Définissez le champ lpszOutput de la structure DOCINFO au entièrement nom de chemin qualifié du fichier, et passe ensuite la structure DOCINFO à la fonction Win32 StartDoc.

Peter

1

Amyuni PDF Converter fait ce que vous avez besoin, il fournit un pilote d'imprimante certifié Microsoft que vous pouvez manipuler entièrement à l'aide d'une interface COM ou assemblage .net, et vous pouvez utiliser la norme GDI (ou classes Windows.Forms) pour générer vos fichiers PDF (vous avez probablement vérifié sur Amyuni PDF Creator, qui est une API personnalisée comme vous l'avez indiqué dans vos commentaires à this answer).

Questions connexes