找回密码
 立即注册

QQ登录

只需一步,快速开始

panjianchang

银牌会员

6

主题

13

帖子

3706

积分

银牌会员

积分
3706

活字格认证元老葡萄

panjianchang
银牌会员   /  发表于:2015-7-10 10:58  /   查看:5512  /  回复:6
写了一个如下的接口类,调用打印pdf的方法,执行时报图中显示的错误。
  public class PDFClass
    {
        public void SavePDF()
        {
            FarPoint.Win.Spread.FpSpread fpSpread1 = new FarPoint.Win.Spread.FpSpread();
            fpSpread1.OpenExcel("D:\\1.xlsx");
        
            FarPoint.Win.Spread.PrintInfo pi = new FarPoint.Win.Spread.PrintInfo();
            pi.PrintToPdf = true;
            pi.PdfWriteMode = FarPoint.Win.Spread.PdfWriteMode.New;
            pi.PdfWriteTo = FarPoint.Win.Spread.PdfWriteTo.File;
            pi.PdfFileName = "D:\\1.pdf";
            fpSpread1.Sheets[0].PrintInfo = pi;
            fpSpread1.PrintSheet(0);        
        }
    }


错误截图.jpg (13.66 KB, 下载次数: 311)

6 个回复

倒序浏览
frank.zhang
社区贡献组   /  发表于:2015-7-10 15:07:00
沙发
您好,
这个问题因为framework的多线程机制导致的。我发现网上有很多的问题,大部分是出现这种情况分为两种。第一种应该是界面还来不及响应Invoke,第二种是界面线程已经结束。
您可以参考以下代码,看是否能够解决您的问题。
  1.             FarPoint.Win.Spread.FpSpread fpSpread1 = new FarPoint.Win.Spread.FpSpread();
  2.             fpSpread1.OpenExcel("test.xlsx");
  3.             fpSpread1.Location = new Point(10, 10);
  4.             fpSpread1.Height = 200;
  5.             fpSpread1.Width = 400;
  6.             Controls.Add(fpSpread1);
  7.             fpSpread1.ActiveSheet.ColumnCount = 4;
  8.             fpSpread1.ActiveSheet.RowCount = 4;

  9.             FarPoint.Win.Spread.PrintInfo printset = new FarPoint.Win.Spread.PrintInfo();
  10.             printset.PrintToPdf = true;
  11.             printset.PdfFileName = "results.pdf";
  12.             // Assign the printer settings and print
  13.             fpSpread1.Sheets[0].PrintInfo = printset;
  14.             fpSpread1.PrintSheet(0);
复制代码


希望能够帮助到您。
回复 使用道具 举报
panjianchang
银牌会员   /  发表于:2015-7-10 16:45:00
板凳
回复 2楼frank.zhang的帖子

尝试了一下,没有解决上述问题。因为我这段代码是需要放在一个类里面,编译成接口被别的模块调用,不是直接在winform界面上运行,代码执行的时候没办法获取当前运行程序的Form窗体。

请问打印PDF方法是否只能在Form窗体上执行,不能编译成接口被其他程序调用?
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-7-10 18:24:00
地板
您好,
您可以尝试使用
  1. fpSpread1.SafePrint(fpSpread1, 0);  
复制代码

希望能够帮助到您。
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-7-20 10:06:00
5#
为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢

评分

参与人数 1满意度 +5 收起 理由
panjianchang + 5 谢谢,问题解决

查看全部评分

回复 使用道具 举报
yanzhenbin
注册会员   /  发表于:2018-8-13 22:56:29
6#
frank.zhang 发表于 2015-7-10 18:24
您好,
您可以尝试使用

fpSpread1.SafePrint(fpSpread1, 0);
这个方法虽然可以打印,但打印速度太慢,需要3秒左右才能打印出来,有替代的快速的方法么?
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-8-15 09:57:20
7#
没有了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部