Я только что сжег час, разрабатывая решение этой проблемы, которое, я уверен, не самое лучшее; Я был бы рад услышать, если есть лучшее решение.
Мне нужно повернуть весь текст на странице относительно точки. Я пытался преобразовать точку в начало координат, выполнить поворот, а затем преобразовать обратно, но кажется, что окончательное преобразование происходит относительно преобразования вращения (что, если подумать, имеет смысл).
Вот упрощенная версия моего кода:
imports itextsharp.text
public class Example
public shared function RotateAboutPoint(byval sourceReader as pdf.pdfreader, byval rads as double, byval centreX as double, byval centreY as double) as pdf.pdfreader
Using ms As New System.IO.MemoryStream
Using doc As New Document
Using writer As pdf.PdfWriter = pdf.PdfWriter.GetInstance(doc, ms)
doc.Open()
For i As Integer = 1 To sourceReader.NumberOfPages
Dim p As pdf.PdfTemplate = writer.GetImportedPage(sourceReader, i)
dim trans as new itextsharp.awt.geom.affinetransform
trans.translate(-centrex, -centrey)
trans.rotate(-rads)
trans.translate(centerx, centery)
doc.setpagesize(sourcereader.getpagesizewithrotation(I))
doc.newpage()
writer.DirectContent.AddTemplate(p, trans)
Next i
doc.Close()
End Using
End Using
sourceReader.Close()
sourceReader.Dispose()
return New pdf.PdfReader(ms.ToArray)
End Using
end function
end class