1
我真的試圖在PDF中添加PDFKit,Xamarin.Mac,因此對於OS X. 所以我的目標是突出顯示將PDF文件中的選定文本作爲註釋永久保存,並在稍後打開文件時將其保存以便檢索它。Xamarin.Mac - 如何突出顯示PDF文件中的選定文本
的事情是,我可以得到當前的選擇,並將其存儲到一個變量:
PdfSelection currentSelection = m_aPdfView.CurrentSelection;
而且我可以創建一個對象PdfAnnotationMarkup:
//Create the markup annotation
var annot = new PdfAnnotationMarkup();
//add characteristics to the annotation
annot.Contents = currentSelectionText;
annot.MarkupType = PdfMarkupType.Highlight;
annot.Color = NSColor.Yellow;
annot.ShouldDisplay = true;
但是我找不到,即使我查了很多不同的文件,如何鏈接他們兩個。 沒有方法給出currentSelection的位置,或任何提示朝這個方向。
有人會知道一種方法使這成爲可能嗎? PS:我發現PDFAnnotation的子類在Apple Developer Website上已棄用,但不在Xamarin Website上,有什麼方法可以知道它們是否完全不同?
在此先感謝您的幫助
編輯:這是我和完美的作品的代碼。感謝svn的回答
//Get the current selection on the PDF file opened in the PdfView
PdfSelection currentSelection = m_aPdfView.CurrentSelection;
//Check if there is an actual selection right now
if (currentSelection != null)
{
currentSelection.GetBoundsForPage(currentSelection.Pages[0]);
//Create the markup annotation
var annot = new PdfAnnotationMarkup();
//add characteristics to the annotation
annot.Contents = "Test";
annot.MarkupType = PdfMarkupType.Highlight;
annot.Color = NSColor.Yellow;
annot.ShouldDisplay = true;
annot.ShouldPrint = true;
annot.UserName = "MyName";
//getting the current page
PdfPage currentPage = currentSelection.Pages[0];
//getting the bounds from the current selection and adding it to the annotation
var locationRect = currentSelection.GetBoundsForPage(currentPage);
getValuLabel.StringValue = locationRect.ToString();
//converting the CGRect object into CGPoints
CoreGraphics.CGPoint upperLeft = locationRect.Location;
CoreGraphics.CGPoint lowerLeft = new CoreGraphics.CGPoint(locationRect.X, (locationRect.Y + locationRect.Height));
CoreGraphics.CGPoint upperRight = new CoreGraphics.CGPoint((locationRect.X + locationRect.Width), locationRect.Y);
CoreGraphics.CGPoint lowerRight = new CoreGraphics.CGPoint((locationRect.X + locationRect.Width), (locationRect.Y + locationRect.Height));
//adding the CGPoints to a NSMutableArray
NSMutableArray pointsArray = new NSMutableArray();
pointsArray.Add(NSValue.FromCGPoint(lowerLeft));
pointsArray.Add(NSValue.FromCGPoint(lowerRight));
pointsArray.Add(NSValue.FromCGPoint(upperLeft));
pointsArray.Add(NSValue.FromCGPoint(upperRight));
//setting the quadrilateralPoints
annot.WeakQuadrilateralPoints = pointsArray;
//add the annotation to the PDF file current page
currentPage.AddAnnotation(annot);
//Tell the PdfView to update the display
m_aPdfView.NeedsDisplay = true;
感謝您的回覆。 使用您的解決方案,我確實可以獲得currentSelection的界限,但註釋不會顯示在PDF上。即使我添加了locationRect。 但是,非常感謝這個解決方案,我不知道如何,但我錯過了......這正是我所期待的! – Hikaiix
可能是因爲你需要使用setQuadrilateralPoints來代替。您需要將矩形轉換爲點陣列 – svn
在應用後還要更新顯示:頁面addAnnotation:和PDFView setNeedsDisplay:YES – svn