首页 新闻 会员 周边

我想做个Js调用c#方法打印文档的功能,但是不知道怎么调用方,求指点.

0
悬赏园豆:20 [已解决问题] 解决于 2018-06-04 17:38
复制代码
public MainWindow()
        {
            InitializeComponent();
            Closing += (s, e) => ViewModelLocator.Cleanup();
            mychrome.Address = "file:///E:/test.html";
            mychrome.RegisterJsObject("callbackObj", new CallbackObjectForJs());
           Closing += new System.ComponentModel.CancelEventHandler(MainWindows_Closing);
}
public class CallbackObjectForJs
        {
            public void showMessage()
            {
      //我想在这调用test_print1()方法,应该怎么写?
           }
       }
public string test_print1()
        {
            //打印
            PrintDialog pdlg = new PrintDialog();
            if (pdlg.ShowDialog() == true)
            {
                FlowDocument doc = PrintPreviewWindow.LoadDocumentAndRender("OrderDocument.xaml", GlobalData.m_orderExample, new OrderDocumentRenderer());
                Dispatcher.BeginInvoke(new DoPrintMethod(DoPrint), DispatcherPriority.ApplicationIdle, pdlg, ((IDocumentPaginatorSource)doc).DocumentPaginator);
            }
            return "文档已打印";
        }
复制代码

wpf,用的cef浏览器加载html页面,html页面上的JS调用c#的方法打印. 所有方法都测试没问题了,就是不知道怎么在CallbackObjectForJs里去调用打印的方法test_print1()

pchief的主页 pchief | 初学一级 | 园豆:10
提问于:2018-06-04 14:49
< >
分享
最佳答案
0
public class CallbackObjectForJs
        {
            public void showMessage()
            {
      //我想在这调用test_print1()方法,应该怎么写?

                 test_print1();
           }
       }    

这样就行了。

 

为了防止你再问,如何在JS中调用showMessage,我就先剧透下, js中这样写就行了。

window.CallbackObjectForJs.showMessage();

收获园豆:20
爱编程的大叔 | 高人七级 |园豆:30839 | 2018-06-04 15:35

不行的,提示:对象引用对于非静态的字段,方法或属性"ManWindows.test_print1()"是必须的

pchief | 园豆:10 (初学一级) | 2018-06-04 16:00

@pchief: 

public class CallbackObjectForJs
        {
            public void showMessage()
            {
      //我想在这调用test_print1()方法,应该怎么写?
           }

public string test_print1()
        {
            //打印
            PrintDialog pdlg = new PrintDialog();
            if (pdlg.ShowDialog() == true)
            {
                FlowDocument doc = PrintPreviewWindow.LoadDocumentAndRender("OrderDocument.xaml", GlobalData.m_orderExample, new OrderDocumentRenderer());
                Dispatcher.BeginInvoke(new DoPrintMethod(DoPrint), DispatcherPriority.ApplicationIdle, pdlg, ((IDocumentPaginatorSource)doc).DocumentPaginator);
            }
            return "文档已打印";
        }

 }

看出啥问题了吗?

爱编程的大叔 | 园豆:30839 (高人七级) | 2018-06-04 16:03

@爱编程的大叔: (⊙o⊙)…没有,如果直接写到CallbackObjectForJs里 总提示:对象引用对于非静态的字段,方法或属性"ManWindows.XXX"是必须的.
我就是不知道这里到底怎么写

pchief | 园豆:10 (初学一级) | 2018-06-04 16:16
爱编程的大叔 | 园豆:30839 (高人七级) | 2018-06-04 16:36

@爱编程的大叔: 搞定了!

private delegate void DoPrintMethod(PrintDialog pdlg, DocumentPaginator paginator);
            private void DoPrint(PrintDialog pdlg, DocumentPaginator paginator)
            {
                pdlg.PrintDocument(paginator, "Order Document");
            }
            public void showMessage()
            {

                //打印
                PrintDialog pdlg = new PrintDialog();
                FlowDocument doc = PrintPreviewWindow.LoadDocumentAndRender("OrderDocument.xaml", GlobalData.m_orderExample, new OrderDocumentRenderer());
                DoPrint(pdlg, ((IDocumentPaginatorSource)doc).DocumentPaginator);
            }
pchief | 园豆:10 (初学一级) | 2018-06-04 17:37
其他回答(2)
0

用的什么框架  aspx  还是其他的

筱浬 | 园豆:601 (小虾三级) | 2018-06-04 14:53

wpf,用的cef浏览器加载html页面,html页面上的JS调用wpf的方法打印.

所有方法都测试没问题了,就是不知道怎么在CallbackObjectForJs里去调用打印的方法test_print1()

支持(0) 反对(0) pchief | 园豆:10 (初学一级) | 2018-06-04 15:00

@pchief: 不会wpf.

支持(0) 反对(0) 筱浬 | 园豆:601 (小虾三级) | 2018-06-04 15:08
0

还是老老实实写一个专门的服务出来吧

龙葛格 | 园豆:782 (小虾三级) | 2018-06-04 15:46

之前的系统是BS的,打印控件总有各种不兼容的问题。而且浏览器无法调用读卡器,只能想办法写个专用“浏览器”。

支持(0) 反对(0) pchief | 园豆:10 (初学一级) | 2018-06-04 16:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册