2013-03-06 6 views
2

Я потерян в данный момент. Что я пытаюсь сделать, это добавить один PDF на другой (например, водяной знак). Проблема в том, что я, кажется, не понимаю систему координат, которая используется, потому что мой водяной знак просто ведет себя непредсказуемо.Импорт позиции в PDF-формате PDF-накопитель

Два PDF-файла имеют разные размеры.

Моя цель имеет следующие размеры:
595 высота
842 ширина

формата PDF, который должен быть добавлен имеет такой размер:
41 высота
552 ширина

В моем коде я делаю следующие:

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); 
      } 
     } 

Когда я делаю Я бы ожидал, что мой водяной знак появится в левом нижнем углу. Вместо этого он находится где-то на странице (я его не вижу). Просто для тестирования я жестко закодировал 600 как позицию y, а затем вертикально центрировался на странице.

Может ли кто-нибудь дать мне отзыв?

+0

То, что я узнал сейчас, представляет интерес. Если я создаю новый документ с PageSize для Sourcepdf, результат будет иметь разные размеры. Кажется, что есть что-то вроде страницы и «видимого размера». Имеет ли это смысл ? – traffiq

+0

Итак, я решил проблему. Проблема заключалась в том, что sourcepdf имел обрезку - поэтому мне нужно только скорректировать мои позиции x и y с этой информацией: Rectangle cropBox = pdfSource.GetCropBox (iPage); float xCorrected = 0 + cropBox.Left; float yCorrected = 0 + cropBox.Bottom; background.AddTemplate (импортированная страница, xCorrected, yCorrected); } } – traffiq

+1

Хорошо, что вы решили свою проблему. Это, BTW, показывает, почему для таких вопросов необходимо также предоставить сам PDF для проверки. (Как замечание на стороне: 'background = stamper.GetOverContent' кажется странным, поскольку ** OverContent ** - это * передний план *, в то время как ** UnderContent ** является * фоном. *) – mkl

ответ

3

Так что я решил проблему. Проблема заключалась в том, что sourcepdf был cropbox - я только нужно исправить мою х и у позиции с этой информацией:

  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); 
      } 
     } 

принять в виду, что в случае, PDF, что вы хотите, чтобы отпечатать на вашем оригинале имеет также урожая, вам нужно снова уменьшить x, y на x, y этого урожая.

Смежные вопросы