我正在使用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,并且应该在保持正确比例的同时在其中标记。
你如何弥补轮换问题?