To reproduce: public Form1() { InitializeComponent(); this.radPdfViewer1.DocumentLoaded += radPdfViewer1_DocumentLoaded; } private void radPdfViewer1_DocumentLoaded(object sender, EventArgs e) { var pdf = (RadPdfViewerElement)sender; var doc = new RadPrintDocument(); doc.AssociatedObject = pdf.ElementTree.Control as RadPdfViewer; doc.PrinterSettings.PrintRange = System.Drawing.Printing.PrintRange.SomePages; doc.PrinterSettings.FromPage = 2; doc.PrinterSettings.ToPage = 1; doc.PrinterSettings.PrintFileName = @"..\..\Once upon a time.pdf"; pdf.Print(showPrinterSettings: false, document: doc); } Workaround: check FromPage before printing.
There is opportunity to further optimize the caching mechanism of the image sources, which will reduce the memory consumption. The fast scrolling in a document containing big images could lead to an OutOfMemoryException. Openining very large images as well.
Workaround: until the feature be implemented one can print each page individually respecting its orientation whether it is portrait or landscape public partial class Form1 : Form { public Form1() { InitializeComponent(); this.radPdfViewer1.LoadDocument(@"..\..\sample.pdf"); } private void radButton1_Click(object sender, EventArgs e) { RadPrintDocument doc = new RadPrintDocument(); doc.AssociatedObject = this.radPdfViewer1; for (int i = 0; i < this.radPdfViewer1.Document.Pages.Count; i++) { RadFixedPage page = this.radPdfViewer1.Document.Pages[i]; doc.CurrentPage = i; doc.PrinterSettings.PrintRange = PrintRange.CurrentPage; doc.Landscape = page.ActualWidth > page.ActualHeight; doc.Print(); } } }
To reproduce: - Print a document that fills the entire page. - On the print preview dialog the page is centered however when printed it is not. In addition, one should be able to control the page scaling.
at System.Drawing.Drawing2D.GraphicsPath.Clone() at Telerik.WinControls.PdfViewer.PdfElementsRenderer.RenderGlyph(Glyph glyph) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawGlyph(Glyph glyph, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawContentElement(IContentElement contentElement, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawGlyphsLayoutBox(GlyphsLayoutBox glyphBox, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawContentElement(IContentElement contentElement, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawContainer(Container container, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawContentElement(IContentElement contentElement, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawContainer(Container container, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawContentElement(IContentElement contentElement, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawPage(ContentCollection content, Graphics graphics, Matrix pageTransform) at Telerik.WinControls.UI.RadFixedPageElement.pageRenderer_DoWork(Object sender, DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument) at System.Drawing.Drawing2D.GraphicsPath.Clone() at Telerik.WinControls.PdfViewer.PdfElementsRenderer.RenderGlyph(Glyph glyph) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawGlyph(Glyph glyph, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawContentElement(IContentElement contentElement, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawGlyphsLayoutBox(GlyphsLayoutBox glyphBox, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawContentElement(IContentElement contentElement, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawContainer(Container container, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawContentElement(IContentElement contentElement, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawContainer(Container container, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawContentElement(IContentElement contentElement, Graphics graphics) at Telerik.WinControls.PdfViewer.FixedPageRenderer.DrawPage(ContentCollection content, Graphics graphics, Matrix pageTransform) at Telerik.WinControls.UI.RadFixedPageElement.pageRenderer_DoWork(Object sender, DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
Workaround: print the document page by page: private void radButton1_Click(object sender, EventArgs e) { RadPrintDocument d = new RadPrintDocument(); d.PrinterSettings.PrintRange = PrintRange.CurrentPage; d.AssociatedObject = this.radPdfViewer1; for (int i = 0; i < this.radPdfViewer1.Document.Pages.Count; i++) { d.CurrentPage = i; d.Print(); } }
Note: If you use the next button to navigate to the next search result, the user should be notified when the end of the document is reached as well. Workaround: public Form1() { InitializeComponent(); this.radPdfViewer1.LoadDocument(@"..\..\..\samplePdf.pdf"); //create a new button CommandBarButton findNext = new CommandBarButton(); findNext.Text = PdfViewerLocalizationProvider.CurrentProvider.GetLocalizedString(PdfViewerStringId.NavigatorFindNextButton); findNext.Click += findNext_Click; findNext.Image = this.radPdfViewerNavigator1.FindNextButton.Image; //hide the currently available button this.radPdfViewerNavigator1.DefaultStrip.Items.Add(findNext); this.radPdfViewerNavigator1.FindNextButton.Visibility = ElementVisibility.Collapsed; } private void findNext_Click(object sender, EventArgs e) { if (this.radPdfViewerNavigator1.SearchTextBox.Text != string.Empty) { if (this.radPdfViewerNavigator1.AssociatedViewer == null || this.radPdfViewerNavigator1.AssociatedViewer.Document == null) { return; } PropertyInfo internalDocumentPI = typeof(RadFixedDocument).GetProperty("InternalDocument", BindingFlags.NonPublic | BindingFlags.Instance); object internalDocument = internalDocumentPI.GetValue(this.radPdfViewerNavigator1.AssociatedViewer.Document, null); object textSearch = internalDocument.GetType().GetProperty("TextSearch", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(internalDocument, null); MethodInfo mi = textSearch.GetType().GetMethod("Find", BindingFlags.Public | BindingFlags.Instance); TextSearchOptions searchOptions = new TextSearchOptions(false); SearchResult searchResult = mi.Invoke(textSearch, new object[2] { this.radPdfViewerNavigator1.SearchTextBox.Text, searchOptions }) as SearchResult; if (searchResult.Result != null) { this.radPdfViewerNavigator1.AssociatedViewer.Select(searchResult); } else { RadMessageBox.Show("No matches"); } } }
http://docs.telerik.com/devtools/wpf/controls/radpdfviewer/document-model/exceptionhandling
To reproduce: public Form1() { InitializeComponent(); radPdfViewer1.DocumentLoaded += radPdfViewer1_DocumentLoaded; radPdfViewer1.LoadDocument(@"..\..\TestDocument.pdf"); } void radPdfViewer1_DocumentLoaded(object sender, EventArgs e) { var pdfViewerElement = sender as RadPdfViewerElement; if (pdfViewerElement != null) { var myDocumentToPrint = new RadPrintDocument(); myDocumentToPrint.AssociatedObject = pdfViewerElement; myDocumentToPrint.DefaultPageSettings.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0); myDocumentToPrint.Print(); } } Please refer to the attached screenshots and sample pdf. Workaround: Specify the RadPrintDocument.DefaultPageSettings.Margins property on a way to have the right margin greater than 0