2013-03-06 7 views
2

Je suis perdu pour le moment. Ce que j'essaie d'accomplir est d'ajouter un PDF sur un autre (comme un filigrane). Le problème est que je ne semble pas comprendre le système de coordonnées qui est utilisé parce que mon filigrane se comporte tout simplement inattendu.Importer la position PDF PDFStamper

Les deux fichiers PDF ont des dimensions différentes.

Mon objectif a les dimensions suivantes:
595 hauteur
842 largeur

Le PDF est ajouté a cette dimension:
41 Hauteur
552 largeur

Dans mon code, je fais ce qui suit:

public bool AddPdf(ref PdfReader pdfSource, ref PdfReader pdfTarget, ref FileStream destination) 
    { 
     PdfStamper stamper = null; 
     try 
     { 
      stamper = new PdfStamper(pdfSource, destination); 
      PdfImportedPage importatedPage = stamper.GetImportedPage(pdfTarget, 1); 

      PdfContentByte background; 
      for (int iPage = 1; iPage <= pdfSource.NumberOfPages; iPage++) 
      { 
       background = stamper.GetOverContent(iPage);      
       background.AddTemplate(importatedPage, 0, 0 + importHeight); 
      } 
     } 

Lorsque je fais Est-ce que je m'attendrais à ce que mon filigrane apparaisse en bas à gauche. Au lieu de cela, il est quelque part de la page (je ne le vois pas). Juste pour tester, j'ai codé en dur 600 en position y et ensuite il est centré verticalement sur la page.

Quelqu'un peut-il me donner un pourboire s'il vous plaît?

+0

Ce que j'ai découvert maintenant est interessant. Si je crée un nouveau document avec le PageSize du Sourcepdf le résultat a une taille de page différente. Il semble qu'il y ait quelque chose comme une taille de page et une "taille visible". Cela a-t-il du sens ? – traffiq

+0

J'ai donc résolu le problème. Le problème était que le sourcepdf avait un cropbox - donc j'ai seulement besoin de corriger ma position x et y avec cette information: Rectangle cropBox = pdfSource.GetCropBox (iPage); float xCorrected = 0 + cropBox.Left; float yCorrected = 0 + cropBox.Bottom; background.AddTemplate (page importée, xCorrigée, yCorrigée); } } – traffiq

+1

Bien que vous ayez résolu votre problème. Ceci, BTW, montre pourquoi pour de telles questions il est nécessaire de fournir également le PDF lui-même pour inspection. (Comme une remarque sur le côté: 'background = stamper.GetOverContent' semble étrange car le ** OverContent ** est le * premier plan * tandis que le ** UnderContent ** est le * background. *) – mkl

Répondre

3

J'ai donc résolu le problème. Le problème était que le sourcepdf avait un CropBox - je ne nécessaire pour corriger ma position x et y avec cette information:

  PdfStamper stamper = null; 
      try 
      { 
      stamper = new PdfStamper(pdfSource, destination); 
      PdfImportedPage importatedPage = stamper.GetImportedPage(pdfTarget, 1); 
      PdfContentByte background; 
      for (int iPage = 1; iPage <= pdfSource.NumberOfPages; iPage++) 
      { 
       background = stamper.GetOverContent(iPage); 

       // here comes the important part 
       Rectangle cropBox = pdfSource.GetCropBox(iPage); 

       float xCorrected = 0 + cropBox.Left; 
       float yCorrected = 0 + cropBox.Bottom; 

       background.AddTemplate(importatedPage, xCorrected, yCorrected); 
      } 
     } 

Prenez à l'esprit que, dans le cas où le pdf que vous souhaitez apposer sur votre original a également une corbeille, vous devez réduire à nouveau les x, y par x, y de cette corbeille.

Questions connexes