2016-12-26 171 views
0

我已經用於水印的代碼如下所示。對於前兩頁,水印顯示正確,但對於第三頁,水印顯示在左上角。當我調試時,它顯示的頁面大小約爲692 * 712。PDF上的水印被設置在左上角而不是頁面的中心

class Program 
{ 
    static string absoluteFile1Path = "filename1.pdf"; 
    static string absoluteFile2Path = "filename2.pdf"; 
    static string destination = "destinationfilename.pdf"; 

    static void Main(string[] args) 
    { 
     string[] filesPath = new string[] { absoluteFile1Path, absoluteFile2Path }; 

     PdfDocument pdfDoc = new PdfDocument(new PdfWriter(destination));    

     PdfMerger merger = new PdfMerger(pdfDoc); 

     PdfDocument srcDoc1 = new PdfDocument(new PdfReader(absoluteFile1Path)); 
     merger.Merge(srcDoc1, 1, srcDoc1.GetNumberOfPages()); 

     PdfDocument srcDoc2 = new PdfDocument(new PdfReader(absoluteFile2Path)); 
     merger.Merge(srcDoc2, 1, srcDoc2.GetNumberOfPages()); 

     pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, new WatermarkHandler());    

     srcDoc1.Close(); 
     srcDoc2.Close(); 

     pdfDoc.Close(); 

    } 
} 

public class WatermarkHandler : IEventHandler 
{ 
    Color lime, blue; 
    PdfFont helvetica; 
    PdfFont font; 

    public WatermarkHandler() 
    { 
     //helvetica = PdfFontFactory.CreateFont(FontConstants.HELVETICA); 
     //lime = new DeviceCmyk(0.208f, 0, 0.584f, 0); 
     //blue = new DeviceCmyk(0.445f, 0.0546f, 0, 0.0667f); 
     font = PdfFontFactory.CreateFont(FontConstants.HELVETICA); 
    } 

    public void HandleEvent(Event @event) 
    { 
     PdfDocumentEvent docEvent = (PdfDocumentEvent)@event; 

     PdfDocument pdf = docEvent.GetDocument(); 
     PdfPage page = docEvent.GetPage(); 
     int pageNumber = pdf.GetPageNumber(page); 
     Rectangle pageSize = page.GetPageSize(); 

     PdfCanvas canvas = new PdfCanvas(page.NewContentStreamAfter(), page.GetResources(), pdf); 
     PdfExtGState gs1 = new PdfExtGState().SetFillOpacity(0.9f).SetStrokeOpacity(0.3f); 
     canvas.SetExtGState(gs1); 
     new Canvas(canvas, pdf, new iText.Kernel.Geom.Rectangle(page.GetPageSize().GetWidth()/2, page.GetPageSize().GetHeight()/2)) 
       .SetFontColor(iText.Kernel.Colors.DeviceGray.LIGHT_GRAY) 
       .SetFontSize(26) 
       .SetFont(font) 
       .ShowTextAligned(new Paragraph("FOR YOUR RECORDS ONLY: DO NOT SUBMIT"), 298, 375, pdf.GetPageNumber(page), 
         TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45); 

     canvas.Release(); 
    } 
} 
} 
+2

向我們展示PDF。也許頁面的左下角有一個不同於'x = 0的座標; y = 0'。你沒有考慮到這個偏移量。 –

+0

頁面高度或頁面寬度可能無法被2整除(即奇數)並且導致問題? – mike510a

回答

0

沒有見過的PDF我不能肯定,但是這是最有可能的頁面由於一個旋轉(90度或270度,如果你的第3頁有其寬度和高度翻轉),從而使顯示水印的絕對座標在旋轉的頁面上有點偏離。

您可以使用PdfPage#getRotation()獲取頁面的旋轉,並根據檢索到的值編寫一些用於計算旋轉後的x和y的邏輯。 There's some info on the coordinate system used in pdfs in chapter 2 of the iText7 jumpstart tutorial.

相關問題