Ich versuche, einen Benutzer ein Rechteck in einem PDF erstellen. Der Benutzer kann ein Rechteck auf dem Bildschirm ziehen.Zeichnen einer Rechteck-Annotation mit PDFTron (PdfNet)
auf dem mouseup Fall wird ein Objekt erzeugt und Rect
Das Problem ist auf das Verfahren AddRectAnnotationToPage (Rectangle rect) übergibt, dass das Rechteck von der Annotation rect geschleppt der Benutzer unterscheidet. Wenn der Benutzer klickt oder scrollt, erhält das Anmerkungsrechteck die richtige Größe (entspricht dem gezogenen Rect, der als Argument übergeben wurde)
Warum nimmt es nicht sofort die richtige Größe an? und warum ändert sich die Größe auf die richtige Größe, wenn ich auf eine zufällige Stelle in der PDF-Datei klicke?
private void AddRectAnnotationToPage(Rectangle rect)
{
if (rect != null)
{
if (this.m_pageNumber < 0)
{
m_pageNumber = this.GetCurrentPage();
}
_cur_page = this.m_pageNumber;
if (_cur_page < 0)
{
return;
}
double width = rect.Width;
double height = rect.Height;
double startX = rect.Left;
double startY = rect.Bottom;
double endX = rect.Right;
double endY = rect.Top;
double X1 = startX;
double Y1 = startY;
double X2 = endX;
double Y2 = endY;
ConvScreenPtToPagePt(ref X1, ref Y1, this.GetCurrentPage());
ConvScreenPtToPagePt(ref X2, ref Y2, this.GetCurrentPage());
Rect pos = new Rect(X1,Y1,X2,X2);
Polygon poly = pdftron.PDF.Annots.Polygon.Create(m_PdfDocument.GetSDFDoc(), pos);
pdftron.PDF.Point p = new pdftron.PDF.Point();
p.x = X1; p.y = Y1;
poly.SetVertex (0, p);
p.x = X1; p.y = Y2;
poly.SetVertex (1, p);
p.x = X2; p.y = Y2;
poly.SetVertex (2, p);
p.x = X2; p.y = Y1;
poly.SetVertex (3, p);
PDFDoc doc = GetDoc();
doc.Lock();
pdftron.PDF.Page pag = doc.GetPage(_cur_page);
Obj annots = pag.GetAnnots();
if (annots == null)
{
// If there are no annotations, create a new annotation
// array for the page.
annots = m_PdfDocument.CreateIndirectArray();
pag.GetSDFObj().Put("Annots", annots);
}
pag.AnnotPushBack(poly);
doc.Unlock();
}
}