|
@@ -1,5 +1,6 @@
|
|
|
using ComPDFKit.PDFDocument;
|
|
|
using ComPDFKit.PDFPage;
|
|
|
+using ComPDFKitViewer;
|
|
|
using ComPDFKitViewer.PdfViewer;
|
|
|
using PDF_Office.EventAggregators;
|
|
|
using PDF_Office.Helper;
|
|
@@ -20,12 +21,16 @@ using System.Windows.Media.Imaging;
|
|
|
|
|
|
namespace PDF_Office.ViewModels.EditTools.Background
|
|
|
{
|
|
|
- public class BackgroundDocumentContentViewModel : BindableBase,INavigationAware
|
|
|
+ public class BackgroundDocumentContentViewModel : BindableBase, INavigationAware
|
|
|
{
|
|
|
public IEventAggregator eventAggregator;
|
|
|
+ public IRegionManager regionManager;
|
|
|
public CPDFViewer PDFViewer;
|
|
|
- public CPDFDocument document;
|
|
|
+ public CPDFDocument Document;
|
|
|
public CPDFBackground background;
|
|
|
+ private BackgroundInfo BackgroundInfo;
|
|
|
+
|
|
|
+ public string ViewerRegionName { get; set; }
|
|
|
|
|
|
|
|
|
private ImageSource _imageSource = null;
|
|
@@ -39,10 +44,12 @@ namespace PDF_Office.ViewModels.EditTools.Background
|
|
|
}
|
|
|
|
|
|
|
|
|
- public BackgroundDocumentContentViewModel(IEventAggregator eventAggregator)
|
|
|
+ public BackgroundDocumentContentViewModel(IEventAggregator eventAggregator, IRegionManager regionManager)
|
|
|
{
|
|
|
this.eventAggregator = eventAggregator;
|
|
|
+ this.regionManager = regionManager;
|
|
|
eventAggregator.GetEvent<SetBackgroundEvent>().Subscribe(SetBackground);
|
|
|
+ ViewerRegionName = RegionNames.BackgroundViewRegionName;
|
|
|
}
|
|
|
|
|
|
public async void AwaitRenderBitmap(CPDFDocument doc)
|
|
@@ -50,21 +57,56 @@ namespace PDF_Office.ViewModels.EditTools.Background
|
|
|
await RenderBitmap(doc);
|
|
|
}
|
|
|
|
|
|
- public void SetBackground( BackgroundInfo backgroundInfo)
|
|
|
+ private void UndoManager_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ private WriteableBitmap GetBackground(CPDFDocument oldDoc, double zoom, int pageIndex)
|
|
|
+ {
|
|
|
+ System.Windows.Size pageSize = oldDoc.GetPageSize(pageIndex);
|
|
|
+
|
|
|
+ CPDFDocument newDoc = CPDFDocument.CreateDocument();
|
|
|
+ newDoc.InsertPage(0, pageSize.Width, pageSize.Height, null);
|
|
|
+
|
|
|
+ // CreateBackground(newDoc);
|
|
|
+ CPDFPage newPage = newDoc.PageAtIndex(0);
|
|
|
+ double scale = 96.0 / 72.0;
|
|
|
+ zoom = zoom * scale;
|
|
|
+ Rect renderRect = new Rect(0, 0, (int)(pageSize.Width * scale), (int)(pageSize.Height * scale));
|
|
|
+ byte[] imageArray = new byte[(int)(renderRect.Width * renderRect.Height * 4)];
|
|
|
+
|
|
|
+ newPage.RenderPageBitmapWithMatrix((float)zoom, renderRect, 0x00FFFFFF, imageArray, 1, true);
|
|
|
+ WriteableBitmap WirteBitmap = new WriteableBitmap((int)renderRect.Width, (int)renderRect.Height, 96, 96, PixelFormats.Bgra32, null);
|
|
|
+ WirteBitmap.WritePixels(new Int32Rect(0, 0, (int)renderRect.Width, (int)renderRect.Height), imageArray, WirteBitmap.BackBufferStride, 0);
|
|
|
+ return WirteBitmap;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void CurrentViewer_CustomDrawHandler(object sender, CustomDrawData e)
|
|
|
+ {
|
|
|
+ if (e.DrawPages.Count > 0 && e.DrawContext != null)
|
|
|
+ {
|
|
|
+ foreach (DrawPageData drawPageData in e.DrawPages)
|
|
|
+ {
|
|
|
+ WriteableBitmap waterMarkBitmap = GetBackground(PDFViewer.Document, e.Zoom, drawPageData.PageIndex);
|
|
|
+ e.DrawContext.DrawImage(waterMarkBitmap, drawPageData.PageBound);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void SetBackground(BackgroundInfo backgroundInfo)
|
|
|
{
|
|
|
- CreateBackground(backgroundInfo);
|
|
|
- document.PdfToImage("0-1", "D:\\");
|
|
|
- document.WriteToFilePath("D:\\sb22222.pdf");
|
|
|
- AwaitRenderBitmap(document);
|
|
|
+ this.BackgroundInfo = backgroundInfo;
|
|
|
+ CreateBackground(PDFViewer.Document);
|
|
|
+ AwaitRenderBitmap(Document);
|
|
|
}
|
|
|
|
|
|
- public void CreateBackground(BackgroundInfo backgroundInfo)
|
|
|
+ public void CreateBackground(CPDFDocument document)
|
|
|
{
|
|
|
- byte[] color = {0,255, 255};
|
|
|
- background = document.GetBackground();
|
|
|
- backgroundInfo.BackgroundType = C_Background_Type.BG_TYPE_IMAGE;
|
|
|
+ byte[] color = { 0, 255, 255 };
|
|
|
+ background = Document.GetBackground();
|
|
|
+ BackgroundInfo.BackgroundType = C_Background_Type.BG_TYPE_IMAGE;
|
|
|
|
|
|
- if (backgroundInfo.BackgroundType == C_Background_Type.BG_TYPE_COLOR)
|
|
|
+ if (BackgroundInfo.BackgroundType == C_Background_Type.BG_TYPE_COLOR)
|
|
|
{
|
|
|
background.SetBackgroundType(C_Background_Type.BG_TYPE_COLOR);
|
|
|
background.SetColor(color);
|
|
@@ -73,8 +115,8 @@ namespace PDF_Office.ViewModels.EditTools.Background
|
|
|
else
|
|
|
{
|
|
|
background.SetBackgroundType(C_Background_Type.BG_TYPE_IMAGE);
|
|
|
- background.SetImage(backgroundInfo.ImageArray, backgroundInfo.ImageWidth, backgroundInfo.ImageHeight, ComPDFKit.Import.C_Scale_Type.fitCenter);
|
|
|
- background.SetScale(1);
|
|
|
+ background.SetImage(BackgroundInfo.ImageArray, BackgroundInfo.ImageWidth, BackgroundInfo.ImageHeight, ComPDFKit.Import.C_Scale_Type.fitCenter);
|
|
|
+ background.SetScale(0.1f);
|
|
|
}
|
|
|
background.SetHorizalign(C_Background_Horizalign.BG_HORIZALIGN_CENTER);
|
|
|
background.SetVertalign(C_Background_Vertalign.BG_VERTALIGN_CENTER);
|
|
@@ -107,7 +149,7 @@ namespace PDF_Office.ViewModels.EditTools.Background
|
|
|
CPDFPage page = doc.PageAtIndex(0, true);
|
|
|
|
|
|
byte[] bmp_data = new byte[(int)page.PageSize.Width * (int)page.PageSize.Height * 4];
|
|
|
- Bitmap bitmap = await ToolMethod.RenderPageBitmap(document, (int)(page.PageSize.Width * 1.4), (int)(page.PageSize.Height * 1.4), 0, true, true);
|
|
|
+ Bitmap bitmap = await ToolMethod.RenderPageBitmap(Document, (int)(page.PageSize.Width * 1.4), (int)(page.PageSize.Height * 1.4), 0, true, true);
|
|
|
//await Task.Run(delegate
|
|
|
//{
|
|
|
// page.RenderPageBitmap(0, 0, (int)page.PageSize.Width, (int)page.PageSize.Height, 0xffffffff, bmp_data, 1);
|
|
@@ -129,9 +171,25 @@ namespace PDF_Office.ViewModels.EditTools.Background
|
|
|
|
|
|
public void OnNavigatedTo(NavigationContext navigationContext)
|
|
|
{
|
|
|
- navigationContext.Parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out PDFViewer);
|
|
|
- document = PDFViewer.Document;
|
|
|
- AwaitRenderBitmap(PDFViewer.Document);
|
|
|
+ CPDFViewer pdfViewer;
|
|
|
+
|
|
|
+ navigationContext.Parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out pdfViewer);
|
|
|
+ if (pdfViewer != null)
|
|
|
+ {
|
|
|
+ if (!regionManager.Regions[ViewerRegionName].Views.Contains(PDFViewer))
|
|
|
+ {
|
|
|
+ PDFViewer = new CPDFViewer();
|
|
|
+ PDFViewer.InitDocument(pdfViewer.Document.FilePath);
|
|
|
+ Document = PDFViewer.Document;
|
|
|
+ PDFViewer.CustomDrawHandler += CurrentViewer_CustomDrawHandler;
|
|
|
+ PDFViewer.UndoManager.PropertyChanged += UndoManager_PropertyChanged;
|
|
|
+ regionManager.AddToRegion(ViewerRegionName, PDFViewer);
|
|
|
+ PDFViewer.SetAnnotInteraction(!PDFViewer.GetAnnotInteraction());
|
|
|
+ PDFViewer.Load();
|
|
|
+ PDFViewer.ChangeViewMode(ViewMode.Single);
|
|
|
+ PDFViewer.SetMouseMode(MouseModes.Default);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|