2013-08-30 9 views
1

Comment puis-je supprimer les sauts de page d'un pdf, de sorte que la sortie soit un simple PDF 'page'? Donc, si une page normale est 400x900 et j'ai 4 pages, un fichier résultant serait 1600x900. Je l'ai déjà fait pour les fichiers TIF (Remove page breaks in multi-page tif to make one long page), mais je voudrais le faire avec PDF. Puis-je éventuellement convertir en ps, supprimer tout code signifie «saut de page», puis convertir en pdf?Supprimer les sauts de page PDF

+0

Voulez-vous que les annotations soient également présentes sur la page fusionnée? Sinon, la réponse de Colton montre le chemin. L'amélioration est cependant possible, par exemple. joindre des pages avec des dimensions différentes n'est pas fait correctement, et certaines optimisations concernant les ressources requises sont également possibles. – mkl

+1

Tout à fait raison. J'ai mis à jour mon exemple pour traiter des pages de dimensions variables (à la fois en largeur et en hauteur). Ajouté en utilisant la déclaration pour une meilleure utilisation de la mémoire. – Milne

Répondre

4

Cela peut se faire dans la bibliothèque iTextSharp en utilisant un seul et PdfTable colonnades changer dynamiquement la taille du document en fonction du nombre de pages.

Vous devez bien sûr quelques références à la iTextSharp DLL trouvé here

using iTextSharp.text; 
using iTextSharp.text.pdf; 
using System.IO; 

Voici un exemple simple:

public static void MergePages() 
{ 
    using (PdfReader reader = new PdfReader(@"C:\Users\cmilne\Desktop\AA0081913.pdf"))//Original PDF containing page breaks. 
    { 
     int pages = reader.NumberOfPages; 
     float postProcessPageHeight = 0; 
     float postProcessPageWidth = 0; 
     for (int p = 1; p <= bill.PageCount; p++) 
     { 
      var size = bill.PdfReader.GetPageSize(p); 
      postProcessPageHeight += (size.Height); 
      if (size.Width > postProcessPageWidth) 
       postProcessPageWidth = (size.Width); 
     } 

     var rect = new Rectangle(postProcessPageWidth, postProcessPageHeight); 

     using (Document document = new Document(rect, 0, 0, 0, 0)) 
     { 
      PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(@"C:\Users\cmilne\Desktop\AA0081913_NEW.pdf", FileMode.Create)); //Declare location\name of new PDF not containing page breaks. 

      document.Open(); 
      PdfImportedPage page; 
      PdfPTable table = new PdfPTable(1); 
      table.WidthPercentage = 100; 

      for (int i = 1; i <= pages; i++) 
      { 
       page = writer.GetImportedPage(reader, i); 
       table.AddCell(iTextSharp.text.Image.GetInstance(page)); 
      } 
      document.Add(table); 
      document.Close(); 
     } 
    } 
} 

La taille de la page de fin doit être inférieure à 14400 par 14400. (C'est tout ce que permet iTextSharp) Un PDF de 8 1/2 x 11 à une résolution commune ferait le maximum d'environ 18 pages.

+0

Merci d'avoir ajouté cette réponse. J'ai manqué le commentaire d'OP jusqu'à aujourd'hui! – JNYRanger

+0

J'ai mis à jour mon exemple pour traiter des pages de dimensions variables (en largeur et en hauteur). Ajouté en utilisant la déclaration pour une meilleure utilisation de la mémoire. – Milne

1

Utilisez la bibliothèque iTextSharp C#. Il vous donne beaucoup d'options pour manipuler les fichiers PDF. Je l'ai déjà utilisé lorsque j'ai dû écrire une application d'importation pour un référentiel de documents en source fermée. Ça a marché comme sur des roulettes. Le seul inconvénient est que leur documentation est un peu inégale parce qu'ils veulent que vous achetiez leur livre. Vous pouvez naviguer sur leur API Java gratuitement car il est presque identique au C#, et il suffit de jouer avec pour trouver la version C#.

iText: http://itextpdf.com/

+1

iTextSharp a certainement beaucoup d'options pour manipuler les PDF, mais je ne vois pas l'option pour supprimer les sauts de page. Savez-vous s'il a cette option? –

Questions connexes