In a Winrt project i have an option on an app bar, when a pdf file is open with the SfPdfViewer, to add a signature (image with signature) to the file.
basically a sidebar appears and the user drags and drops a image on top of the pdf, then presses save, and i generate a new pdf file with the signature.
the new pdf file is generated indeed, but the signature sometimes appears in the wrong place.
and this is the part i use when i drag and drop my signature image
private void OnDragItemsStarting(object sender, DragItemsStartingEventArgs e)
{
e.Data.Properties.Add(string.Empty, e.Items.Single());
}
private void OnDrop(object sender, DragEventArgs e)
{
signGrid.Visibility = Visibility.Collapsed;
try
{
var item = e.Data.Properties.Values.Single() as ImageSource;
position = e.GetPosition(sender as UIElement);
var style = Resources["ImageStyle"] as Style;
Debug.WriteLine("POS: " + position);
var image = new Image
{
Style = style,
HorizontalAlignment = HorizontalAlignment.Left,
ManipulationMode = ManipulationModes.All,
RenderTransform = new CompositeTransform(),
Source = item,
VerticalAlignment = VerticalAlignment.Top,
};
Debug.WriteLine("Image: " + image.ActualWidth + " " + image.ActualHeight);
Thickness imageThickness = new Thickness(position.X - image.ActualWidth / 2 + 10,
position.Y - image.ActualHeight / 2 + 10, 0, 0);
Debug.WriteLine("imageThickness: " + imageThickness);
// Thickness imageThickness = new Thickness(position.X,position.Y,0,0);
image.Margin = imageThickness;
image.ManipulationDelta += OnManipulationDelta;
images.Add(image);
dropGrid.Children.Add(image);
}
catch (Exception e1)
{
MarkedUp.AnalyticClient.Error("PdfPage.cs 287 " + e1.Message);
}
}
private void OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
var image = sender as Image;
var transform = image.RenderTransform as CompositeTransform;
transform.TranslateX += e.Delta.Translation.X;
transform.TranslateY += e.Delta.Translation.Y;
}
private void OnVerticalValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
foreach (var image in images)
{
var transform = image.RenderTransform as CompositeTransform;
transform.TranslateY += e.OldValue - e.NewValue;
}
verticalOffset = (float)e.NewValue;
}
private void OnHorizontalValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
foreach (var image in images)
{
var transform = image.RenderTransform as CompositeTransform;
transform.TranslateX += e.OldValue - e.NewValue;
}
horizontalOffset = (float)e.NewValue;
}
and after its dropped i do this on my save method.
private async void OnSaveButtonClick(object sender, RoutedEventArgs e)
{
CloseAppBars();
backButton.IsEnabled = false;
IsLoading = true;
try
{
foreach (var image in this.images)
{
var bitmap = image.Source as ImageSource;
var index = bitmaps.IndexOf(bitmap);
var signature = signatures.ElementAt(index);
var bytes = await signature.Data.EncodePngToJpeg();
PdfImage pdfImage;
using (var memoryStream = new MemoryStream(bytes))
{
pdfImage = PdfImage.FromStream(memoryStream);
}
var transform = image.RenderTransform as CompositeTransform;
var x = (image.Margin.Left + transform.TranslateX + horizontalOffset) * 100 / pdfViewer.Zoom - 10;
var y = (image.Margin.Top + transform.TranslateY + verticalOffset) * 100 / pdfViewer.Zoom - 10;
Debug.WriteLine("XY " + x + " " + y);
var firstPage = pdfDocument.Pages[pdfViewer.PageNumber];
var pageHeight = firstPage.Size.Height;
var pageWidth = firstPage.Size.Width;
var selpage = pdfViewer.PageNumber;
//var pageNumber = 0;
//while (y > pageHeight)
//{
// y -= pageHeight + 11;
// pageNumber++;
//}
var page = pdfDocument.Pages[selpage-1];
Debug.WriteLine("PAG " + selpage);
var graphics = page.Graphics;
//var width = image.Width * 100 / pdfViewer.Zoom;
//var height = image.Height * 100 / pdfViewer.Zoom;
var width = image.Width;
var height = image.Height;
float fWidth = (float)width;
float fHeight = (float)height;
fWidth = 165f * 0.50f;
fHeight = 110f * 0.50f;
graphics.ScaleTransform(0.75f, 0.75f);
graphics.DrawImage(pdfImage, (float)x, (float)y, fWidth, fHeight);
} ...
Im guessing that its a bit confusing just looking at that
So i was wondering if you guys have any examples of a drag and drop image on top of a pdf and save it (creating a new pdf file with the image inserted )