Combinaison de plusieurs fichiers PDF en utilisant PDFSharp
Je suis en train d'essayer de combiner plusieurs fichiers Pdf en un seul fichier PDF. Les documents proviennent de SSRS, à partir de quelques LocalReports que j'ai traité. Je suis à l'aide de PDFSharp, car il est déjà utilisé par le projet. Cependant, la outputDocument.addPage(page) méthodes déclenche une exception InvalidOperationException("Impossible de modifier le document.") exception à la règle. J'ai essayé beaucoup de différentes manière de faire ceci, mais je ne peux pas le faire fonctionner...
Ici ma méthode, où toutes les entrées ont déjà été vérifiées:
private static void saveFile(string fileName, params byte[][] bytes)
{
try
{
PdfDocument outputDocument = new PdfDocument();
for (int i = 0; i < bytes.Length; i++)
{
using (MemoryStream stream = new MemoryStream(bytes[i]))
{
PdfDocument inputDocument = PdfReader.Open(stream, PdfDocumentOpenMode.Import);
foreach (PdfPage page in inputDocument.Pages)
{
outputDocument.AddPage(page); //throws the exception !!!
}
}
}
outputDocument.Save(fileName);
}
catch (Exception ex)
{
throw new Exception("Erreur lors de l'enregistrement du fichier", ex);
}
}
Dans les exemples que j'ai vu sur le web, ce qui semble être la bonne façon de le faire...
Je suis ouvert à d'autres suggestions pour la fusion de mes fichiers Pdf, mais je préfère ne pas utiliser un autre 3ème partie lib, comme ITextSharp, parce que PDFSharp est déjà utilisé dans le projet.
Si il le faut, je suis à l'aide de VS2010 Pro sur un Win7 machine.
EDIT : pile d'Appel de l'exception :
au PdfSharp.Pdf.PdfObject.set_Document(PdfDocument valeur)
au PdfSharp.Pdf.PdfObject.ImportClosure(PdfImportedObjectTable importedObjectTable, PdfDocument propriétaire, PdfObject externalObject)
au PdfSharp.Pdf.PdfPages.CloneElement(PdfPage page, PdfPage importPage, de clés de la Chaîne, Booléen propriétédeepcopy)
au PdfSharp.Pdf.PdfPages.ImportExternalPage(PdfPage importPage)
au PdfSharp.Pdf.PdfPages.Insert(Int32 index, PdfPage page)
au PdfSharp.Pdf.PdfPages.Ajouter(PdfPage page)
au PdfSharp.Pdf.PdfDocument.AddPage(PdfPage page)
à quelque Chose.saveFile(String fileName, Byte[][] bytes)
Est le problème avec moi ? N'est-ce pas la façon dont c'est censé être fait ?
Ou est-il un autre moyen de la combinaison de plusieurs LocalReport en un seul fichier PDF ?
source d'informationauteur Pierre-Olivier Goulet
Vous devez vous connecter pour publier un commentaire.
Je suis venu à croire qu'il pourrait être l'entrée des fichiers Pdf qui sont endommagés ou illisibles pour les PDFSharp. Il existe plusieurs exemples de SSRS des fichiers Pdf n'étant pas lisible au format PDF-les bibliothèques ou même d'Adobe Reader. Par exemple ici:
http://www.sqldev.org/sql-server-reporting-services/export-pdf-in-ssrs-2008-vs-ssrs-2005--pdf-is-different-wont-work-with-itextsharp-possibly-other-13968.shtml
... et ici:
https://stackoverflow.com/questions/2393175/ssrs-2008-pdf-files-cannot-be-opened
... ET le plus important sur le PDFSharp forum:
http://forum.pdfsharp.net/viewtopic.php?f=2&t=674
Je ne sais pas si c'est le bug que vous êtes à la rencontre - le message est étrange, mais il semble avoir quelque chose à faire avec cela, lorsque vous prenez en compte que votre exemple de code fonctionne parfaitement avec tous les PDF que j'ai essayé (je n'ai pas de SQL Server Rapports d'essayer, tout de même)
Je ne suis pas sûr de ma réponse. Veuillez lire votre auto.
http://www.go4coding.com/post/2011/05/26/Merging-PDF-files-into-single-PDF-in-CSharp-using-PDFSharp.aspx
Tout d'abord, merci pour vos commentaires. Le problème ne vient pas de la compression, car j'ai
<humanreadalble>
vrai</humanreadable>
dans mon appareil info de la chaîne, sinon PDFSharp juste ne peut pas voir quoi que ce soit dans le PDF.J'ai essayé de recompiler PDFSharp à partir du dernier code source, et cela a fonctionné... Il ne jette pas l'exception plus. La chose étrange est que j'ai vérifié la version de ma dll et c'était le même que la dernière version. Ils ont peut-être quelque chose de fixe sans incrémentation de la version ?
De toute façon, merci pour votre aide. J'ai répondu à votre post comme la réponse à montrer mon appréciation.