导入PDF位置PDFStamper

时间:2013-03-06 09:32:10

标签: itextsharp itext watermark pdfstamper

此刻我迷路了。 我试图完成的是在另一个上添加一个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位置,然后它在页面上垂直居中。

有人可以给我一个小费吗?

1 个答案:

答案 0 :(得分:3)

所以我解决了这个问题。 问题是sourcepdf有一个cropbox - 我只需要用这些信息来纠正我的x和y位置:

            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。