iTextSharp:邮票旋转/放置错误

时间:2017-03-06 02:42:17

标签: c# pdf itext

我正在使用iTextsharp 7实现另一个使用标记的应用程序。我在多个实例上遇到过这个问题。我的标记代码类似于以下内容:

 public Stamper(PdfDocument _doc, Rectangle _rect)
    {
        doc = _doc;
        Location = _rect;
    }

    public void StampPDF()
    {
        PdfDocument srcDoc = new PdfDocument(new PdfReader(Settings.Default.DefaultAppearance.SignStamp));
        // Create FormXObject and Canvas

        PdfFormXObject page = srcDoc.GetFirstPage().CopyAsFormXObject(doc);
        //Extract Page Dimensions
        float xWidth = srcDoc.GetFirstPage().GetCropBox().GetWidth();
        float xHeight = srcDoc.GetFirstPage().GetCropBox().GetHeight();
        //Better safe than sorry....
        double ratio = xHeight / xWidth;
        ratio = (float)ratio;

        float scaledXHeight = Location.GetHeight();
        float scaledXWidth = (float)(scaledXHeight / ratio * 1.0);



        //Rectangle location = new Rectangle(crop.GetLeft(), crop.GetBottom(), scaledXWidth , scaledXHeight );


        PdfStampAnnotation stamp = new PdfStampAnnotation(Location).SetStampName(new PdfName(Settings.Default.DefaultAppearance.SignName+" Signature"));
        PdfCanvas canvas = new PdfCanvas(doc.GetFirstPage().NewContentStreamBefore(), doc.GetFirstPage().GetResources(), doc);

       // canvas.AddXObject(page,location.GetLeft(),location.GetBottom(),page.GetWidth());
        stamp.SetNormalAppearance(page.GetPdfObject());
        stamp.SetFlags(PdfAnnotation.PRINT);
        doc.GetFirstPage().AddAnnotation(stamp);


        srcDoc.Close();

注意到我正在合并另一个PDF作为我的邮票。一旦我尝试为特定的插槽创建一个矩形,我的印章最终会过度拉伸或旋转90度。我怀疑这是合并的PDF具有非零的旋转的结果。但是,即使将其旋转设置为0也无法解决问题。此外,如果我正在打印的页面被旋转,使用像CropBox这样的参考点只是失败并在非预期的区域和方向上盖章,问题会更加严重。

编辑:更新了代码以反映我的具体情况。该函数正在接收并且已经存在(硬编码)Rectangle,称为Location,并且应该在保持正确比例的同时在其中标记。

你如何弥补轮换问题?

0 个答案:

没有答案