Итак, я пытаюсь просто добавить текстовую аннотацию в pdf в верхнем левом углу pdf документа. Текущий код такой:
public static byte[] StampPDFDocument(byte[] pdf, string stampString) {
using (var ms = new MemoryStream()) {
var reader = new iTextSharp.text.pdf.PdfReader(pdf);
var stamper = new iTextSharp.text.pdf.PdfStamper(reader, ms);
var box = reader.GetCropBox(1);
var left = box.Left;
var top = box.Top;
iTextSharp.text.Rectangle newRectangle = new iTextSharp.text.Rectangle(left + 20, top - 20, left + 250, top - 40);
var pcb = new iTextSharp.text.pdf.PdfContentByte(stamper.Writer);
pcb.SetColorFill(iTextSharp.text.BaseColor.RED);
var annot = iTextSharp.text.pdf.PdfAnnotation.CreateFreeText(stamper.Writer, newRectangle, stampString, pcb);
annot.Flags = iTextSharp.text.pdf.PdfAnnotation.FLAGS_PRINT;
annot.BorderStyle = new iTextSharp.text.pdf.PdfBorderDictionary(0, 0);
stamper.AddAnnotation(annot, 1);
stamper.Close();
return ms.ToArray();
}
}
Теперь оригинальный код просто использовал box = reader.GetPageSize (1). Хорошо, что я скоро понял, вызывает проблемы, если документ был повернут. Хорошо. Нет проблем, есть функция с именем reader.GetPageSizeWithRotation. Это работает как шарм. Тем не менее, теперь я получаю документы, которые имеют другую рамку. Таким образом, аннотация, которую я добавлял, была за пределами области рамки. Таким образом, этот текущий код работает только для не повернутых документов. Вопрос в том, как получить левый верхний элемент ядра в документе PDF, независимо от того, повернут ли документ или содержит обрезку, отличную от документа?