public string SaveRightMovePdf(RightMoveModel rightMoveModel) { try { PdfLoadedDocument loadedDocument = new PdfLoadedDocument(new FileStream(templatePath, FileMode.Open)); if (!Directory.Exists(archiveFolder)) { Directory.CreateDirectory(archiveFolder); } if (loadedDocument.PageCount > 0) { PdfLoadedPage pdfLoadedPage = loadedDocument.Pages[1] as PdfLoadedPage; PdfTemplate pdfTemplate = new PdfTemplate(900, 600); PdfFont pdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 15); PdfBrush brush = new PdfSolidBrush(SfDrawing.Color.Black); byte[] imageBytes = new WebClient().DownloadData(rightMoveModel.PropertyMainPicture); Stream imageStream = new MemoryStream(imageBytes); pdfTemplate.Graphics.DrawString($"Property Address: {rightMoveModel.PropertyAddress}", pdfFont, brush, 100, 30); pdfTemplate.Graphics.DrawString($"Property Type: {rightMoveModel.PropertyType}", pdfFont, brush, 100, 50); pdfTemplate.Graphics.DrawString($"PropertyPrice: {rightMoveModel.PropertyPrice} ", pdfFont, brush, 100, 70); pdfTemplate.Graphics.DrawImage(PdfImage.FromStream(imageStream), new SfDrawing.PointF(100, 100), new SfDrawing.SizeF(400, 400)); pdfLoadedPage.Graphics.DrawPdfTemplate(pdfTemplate, SfDrawing.PointF.Empty); string rawName = rightMoveModel .PropertyUrl .Replace("/", "") .Replace("-", "") .Replace(".", "") .Replace(":", "") .Replace("//", ""); string fileName = Regex.Match(rawName, @"(\d+(?:\.\d{1,2})?)").Value; PdfDocument propertyHeatMapPdfDocument = htmlConverter.Convert(rightMoveModel.PropertyHeatHtmlString, string.Empty); PdfDocument homeCoUKHtmlPdfDocument = htmlConverter.Convert(rightMoveModel.HomeCoUKHtmlString, string.Empty); string tempPropertyHeatMap = Path.Combine(tempFolder, $"propertyHeatMap{fileName}.pdf"); using (FileStream propertyHeatMapStream = new FileStream(tempPropertyHeatMap, FileMode.Create)) { propertyHeatMapPdfDocument.Save(propertyHeatMapStream); propertyHeatMapPdfDocument.Close(true); propertyHeatMapPdfDocument.Dispose(); propertyHeatMapStream.Close(); propertyHeatMapStream.Dispose(); } string tempHomeCoUK = Path.Combine(tempFolder, $"homeCoUK{fileName}.pdf"); using (FileStream homeCoUKHtmlPdfStream = new FileStream(tempHomeCoUK, FileMode.Create)) { homeCoUKHtmlPdfDocument.Save(homeCoUKHtmlPdfStream); homeCoUKHtmlPdfDocument.Close(true); homeCoUKHtmlPdfDocument.Dispose(); homeCoUKHtmlPdfStream.Close(); homeCoUKHtmlPdfStream.Dispose(); } using (FileStream propertyHeatMapReadStream = new FileStream(tempPropertyHeatMap, FileMode.Open)) { PdfLoadedDocument tempPropertyHeatMapDocument = new PdfLoadedDocument(propertyHeatMapReadStream); loadedDocument.ImportPage(tempPropertyHeatMapDocument, 0); propertyHeatMapReadStream.Close(); propertyHeatMapReadStream.Dispose(); } using (FileStream homeCoUKReadStream = new FileStream(tempHomeCoUK, FileMode.Open)) { PdfLoadedDocument tempHomeCoUKDocument = new PdfLoadedDocument(homeCoUKReadStream); loadedDocument.ImportPage(tempHomeCoUKDocument, 0); homeCoUKReadStream.Close(); homeCoUKReadStream.Dispose(); } string savePath = Path.Combine(archiveFolder, $"{fileName}.pdf"); using (FileStream saveStream = new FileStream(savePath, FileMode.Create)) { loadedDocument.Save(saveStream); loadedDocument.Close(true); loadedDocument.Dispose(); saveStream.Close(); saveStream.Dispose(); } return($"file successfully saved at: {savePath}"); } else { Console.WriteLine("Invalid PDF file"); return($"Invalid PDF file"); } } catch (Exception ex) { Console.WriteLine($"Unable to save the file. {ex.Message}"); return($"Unable to save the file"); } }
public void ScrapRightMove() { try { string rVal = string.Empty; driver = new ChromeDriver(service); htmlWeb = new HtmlWeb(); NavigationOutput($"Navigating to: {rightMoveUrl}"); driver.Url = rightMoveUrl; driver.FindElement(By.Name("searchLocation")) .SendKeys(postalCode); driver.FindElement(By.Id("buy")).Click(); NavigationOutput($"Navigating to: {driver.Url}"); MainProgressBar.Value = 2; driver.FindElement(By.Id("submit")).Click(); #region Get property list URLs ReadOnlyCollection <IWebElement> readOnlyCollection; readOnlyCollection = driver.FindElements(By.CssSelector(".propertyCard-moreInfoItem.is-carousel")); if (readOnlyCollection.Count <= 0) { readOnlyCollection = driver.FindElements(By.CssSelector(".propertyCard-link")); } NavigationOutput($"Finding URLs on: {driver.Url}"); MainProgressBar.Value = 10; foreach (var item in readOnlyCollection) { propertiesLinks.Add(item.GetAttribute("href")); } ProgressBar.Value = 90; if (propertiesLinks.Count > 0) { NavigationOutput($"Successfully found {propertiesLinks.Count} URLs on: {driver.Url}"); driver.Quit(); var progresscount = propertiesLinks.Count / 100; MainProgressBar.Value = 15; foreach (var _item in propertiesLinks) { ProgressBar.Value = 0; if (!string.IsNullOrEmpty(_item)) { NavigationOutput($"Fatching data from: {_item}"); ProgressBar.Value += progresscount; MainProgressBar.Value += progresscount / 2; Text_Outputs.Content = $"Fatching data from: {_item}"; HtmlDocument htmlDocument = htmlWeb.Load(_item); string propertyType = htmlDocument .DocumentNode .SelectNodes("//h1[@class='fs-22']")[0] .InnerHtml; string propertyAddress = htmlDocument .DocumentNode .SelectNodes("//meta[@itemprop='streetAddress']")[0] .GetAttributeValue("content", string.Empty); string propertyPriceHtml = htmlDocument .DocumentNode .SelectNodes("//p[@id='propertyHeaderPrice']")[0].InnerText; string rawPrice = propertyPriceHtml .Replace("\r", "") .Replace("\n", "") .Replace("\t", "") .Replace(";", "") .Replace(",", ""); string propertyPrice = Regex.Match(rawPrice, @"(\d+(?:\.\d{1,2})?)").Value; string propertyMainPicture = htmlDocument .DocumentNode .SelectNodes("//img[@class='js-gallery-main']")[0] .GetAttributeValue("src", string.Empty); string propertyHeatHtmlString = ScrapPropertyHeat(); string innerHtml = ScrapHomeCoUk(); RightMoveModel rightMoveModel = new RightMoveModel() { PropertyAddress = propertyAddress, PropertyMainPicture = propertyMainPicture, PropertyPrice = propertyPrice, PropertyType = propertyType, PropertyUrl = _item, PropertyHeatHtmlString = propertyHeatHtmlString, postalCode = postalCode, HomeCoUKHtmlString = innerHtml }; Text_Outputs.Content = $"Saving file to pdf"; rVal = pdfHandler.SaveRightMovePdf(rightMoveModel); Text_Outputs.Content = rVal; } else { NavigationOutput($"Invalid Url: {_item}"); } } MainProgressBar.Value = 100; ProgressBar.Value = 100; } else { NavigationOutput($"No URLs found on: {driver.Url}"); driver.Quit(); } #endregion } catch (Exception ex) { NavigationOutput(ex.Message); driver.Quit(); return; } }