PrintToPdfForm.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. PrintSettingPropertyGrid.SelectedObject = _printSettings;
  22. UpdatePreview();
  23. }
  24. private void RefreshButton_Click(object sender, EventArgs e)
  25. {
  26. UpdatePreview();
  27. }
  28. private void PrintSettingPropertyGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
  29. {
  30. UpdatePreview();
  31. }
  32. private void SaveButton_Click(object sender, EventArgs e)
  33. {
  34. var sfd = new SaveFileDialog
  35. {
  36. Title = "Save as PDF",
  37. Filter = "PDF files (*.pdf)|*.pdf"
  38. };
  39. if (DialogResult.OK != sfd.ShowDialog()) return;
  40. try
  41. {
  42. if (File.Exists(sfd.FileName)) File.Delete(sfd.FileName);
  43. File.Move(_tempPdfFile, sfd.FileName);
  44. DialogResult = DialogResult.OK;
  45. Close();
  46. }
  47. catch (Exception exception)
  48. {
  49. MessageBox.Show(exception.ToString(), "Save as PDF fail", MessageBoxButtons.OK, MessageBoxIcon.Error);
  50. }
  51. }
  52. private void UpdatePreview()
  53. {
  54. if (null != _tempPdfFile) File.Delete(_tempPdfFile);
  55. _tempPdfFile = Path.GetTempFileName();
  56. File.Move(_tempPdfFile, _tempPdfFile += ".pdf");
  57. _sourceBrowser.ExportAsPdf(_tempPdfFile, _printSettings);
  58. _previewBrowser.LoadUrl($"file:///{_tempPdfFile}");
  59. }
  60. private void PrintToPdfForm_FormClosed(object sender, FormClosedEventArgs e)
  61. {
  62. if (null != _tempPdfFile) File.Delete(_tempPdfFile);
  63. if (DialogResult.OK == DialogResult)
  64. {
  65. //TODO: Save print setting into config store
  66. }
  67. }
  68. private void CancelButton_Click(object sender, EventArgs e)
  69. {
  70. DialogResult = DialogResult.Cancel;
  71. Close();
  72. }
  73. }
  74. }