0
votes

Comment créer la même copie de PDF dans le même document PDF

Dans mon utilisateur, l'utilisateur passe l'entrée comme nombre de copies.

Donc, si l'utilisateur passe le nombre de copies 2, je veux générer un document PDF unique avec les mêmes pages répétant deux fois

J'utilise Bibliothèque PDFSharp

J'ai ci-dessous le code qui crée un document PDF avec plusieurs pages xxx

Je suis sûr que nous devons ajouter une boucle mais que plus de choses que je dois faire avoir les mêmes copies répétant dans le même document que par entrée fournie à condition que

permet de dire que le document généré 2 pages et utilisateur dit nombre de copies 2 alors que ce seul Le document PDF aura maintenant 4 pages avec 2 pages répétant deux fois dans le même document:

pagecontent1 pagecontent 2, pagecontent1, pagecontent2

Mise à jour 2

J'ai essayé la solution @christophers et j'ai changé de code comme ci-dessous avant d'enregistrer le document xxx

mais maintenant je reçois une erreur Un document PDF doit être ouvert avec pdfdocumentopenmode.import Pour importer des pages de celui-ci


4 commentaires

Parlons-nous de Pagecontent1, Pagecontent2, Pagecontent1, Pagecontent2? Ou pagecontent1, pagecontent1, pagecontent2, pagecontent2


Vous voulez faire des copies de certaines pages en tant que PDF séparé?


@christopher pagecontent1 pagecontent 2, pagecontent1, pagecontent2


@kixoka je veux une copie de certaines pages dans le même PDF


3 Réponses :


1
votes

D'accord, le propblème s'est avéré très différent de ce que j'ai compris. Comme je n'ai aucune expérition avec PDFSharp en particulier, je ne peux que vous aider avec la structure de boucle générale.

//I use a array to simulate the input PDF
int[] input = new int[]{ 1, 2 };
//And a list to simulate the output PDF
List<int> output = new List<int>();

//PageCopies is set somewhere outside this code.
//The loop counting the copies
for(int i = 0; i < PageCopies; i++){
  //the loop doing the copies
  for(int k = 0; k < input.Count; k++){
    output.Add(input[k]);
  }
}


0 commentaires

2
votes

Si je comprends bien correctement, je pense que vous pouvez enregistrer votre PDF complet original, puis ouvrir et fusionner plusieurs fois.

Si tel est le cas, cela peut être proche. J'ai combiné votre code avec une documentation de PDFSharp trouvée ici: http: // www. pdfshaparp.net/wiki/concaténateateocuments-sample.ashx xxx

Je soupçonne que cela pourrait être fait sans sauvegarder et redoubler le document, mais je n'ai pas 't utilisé moi-même.


3 commentaires

Est-il possible que nous ne économisions pas de document en première instance et utilise simplement une instance de variable de document, puis effectuez une opération de fusion entière et enregistrez enfin un seul document?


Je soupçonne oui, mais je ne connais pas PDFSharp et que pourrait arriver à l'état interne des objets tels qu'ils sont utilisés. Je voudrais essayer de le faire sans enregistrer le premier document et voir ce qui se passe.


Avez-vous donné cela un essai? Je vois votre mise à jour que vous avez rencontrée dans une erreur que le document doit être ouvert en mode d'importation, cette méthode utilise le mode d'importation.



1
votes

Enfin, j'ai réussi à me résoudre, mais au-delà des indices de @christopher et @blaise. Voici mon code final

var document = new PdfDocument();
var page = document.AddPage();
var gfx = XGraphics.FromPdfPage(page);
page.Width = XUnit.FromMillimeter(111);
page.Height = XUnit.FromMillimeter(222);
//some logic to create multiple pages
 document.Save("C:\mydoc\");

PdfDocument finalOutputDocument;
        if (CopyCount >1)
        {
            MemoryStream stream = new MemoryStream();
            document.Save(stream, false);
            PdfDocument source = PdfReader.Open(stream, PdfDocumentOpenMode.Import);

            finalOutputDocument= new PdfDocument();

            for (int i = 0; i < CopyCount; i++)
            {
                for (int k = 0; k < document.Pages.Count; k++)
                {
                    finalOutputDocument.Pages.Add(source.Pages[k]);
                }
            }
        }
        else
        {
            finalOutputDocument= document;
        }

        finalOutputDocument.Save(path);


0 commentaires