PrintToPdfForm.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using CefSharpWrap;
  2. using System;
  3. using System.IO;
  4. using System.Windows.Forms;
  5. namespace MarkdownRenderer
  6. {
  7. public partial class PrintToPdfForm : Form
  8. {
  9. private readonly CefSharpWrapBrowser _sourceBrowser;
  10. private readonly CefSharpWrapBrowser _previewBrowser;
  11. private readonly CefSharpWrapPdfExportSetting _printSettings;
  12. private string _tempPdfFile;
  13. public PrintToPdfForm(CefSharpWrapBrowser sourceBrowser)
  14. {
  15. _sourceBrowser = sourceBrowser;
  16. InitializeComponent();
  17. _previewBrowser = CefSharpWrapFactory.CreateLocalFileAccessInstance("about:blank");
  18. _previewBrowser.FillToControl(MainSplitContainer.Panel2);
  19. //TODO: Read print setting from config store
  20. _printSettings = new CefSharpWrapPdfExportSetting();
  21. _printSettings.BackgroundsEnabled = true;
  22. PrintSettingPropertyGrid.SelectedObject = _printSettings;
  23. UpdatePreview();
  24. }
  25. private void RefreshButton_Click(object sender, EventArgs e)
  26. {
  27. UpdatePreview();
  28. }
  29. private void PrintSettingPropertyGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
  30. {
  31. UpdatePreview();
  32. }
  33. private void SaveButton_Click(object sender, EventArgs e)
  34. {
  35. var sfd = new SaveFileDialog
  36. {
  37. Title = "Save as PDF",
  38. Filter = "PDF files (*.pdf)|*.pdf"
  39. };
  40. if (DialogResult.OK != sfd.ShowDialog()) return;
  41. try
  42. {
  43. if (File.Exists(sfd.FileName)) File.Delete(sfd.FileName);
  44. File.Move(_tempPdfFile, sfd.FileName);
  45. DialogResult = DialogResult.OK;
  46. Close();
  47. }
  48. catch (Exception exception)
  49. {
  50. MessageBox.Show(exception.ToString(), "Save as PDF fail", MessageBoxButtons.OK, MessageBoxIcon.Error);
  51. }
  52. }
  53. private void UpdatePreview()
  54. {
  55. if (null != _tempPdfFile) File.Delete(_tempPdfFile);
  56. _tempPdfFile = Path.GetTempFileName();
  57. File.Move(_tempPdfFile, _tempPdfFile += ".pdf");
  58. _sourceBrowser.ExportAsPdf(_tempPdfFile, _printSettings);
  59. _previewBrowser.LoadUrl($"file:///{_tempPdfFile}");
  60. }
  61. private void PrintToPdfForm_FormClosed(object sender, FormClosedEventArgs e)
  62. {
  63. if (null != _tempPdfFile) File.Delete(_tempPdfFile);
  64. if (DialogResult.OK == DialogResult)
  65. {
  66. //TODO: Save print setting into config store
  67. }
  68. }
  69. private void CancelButton_Click(object sender, EventArgs e)
  70. {
  71. DialogResult = DialogResult.Cancel;
  72. Close();
  73. }
  74. }
  75. }