找回密码
 立即注册

QQ登录

只需一步,快速开始

islands

初级会员

3

主题

9

帖子

488

积分

初级会员

积分
488

活字格认证

最新发帖
islands
初级会员   /  发表于:2012-8-20 10:11  /   查看:5883  /  回复:1
我创建了一个Windows服务,里面用了Timer,作用是定期读取文件夹下的XML文件,然后转换成PDF。
可是当代码走到声明对象FpSpread fpSpread = new FpSpread(); 就不往下走了。请尽快帮忙,谢谢了。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Diagnostics;
  6. using System.ServiceProcess;
  7. using System.Text;
  8. using System.IO;
  9. using System.Threading;
  10. using FarPoint.Win.Spread;

  11. namespace ELN2PDFService
  12. {
  13.     public partial class ELN2PDF : ServiceBase
  14.     {
  15.         private System.Timers.Timer timer;
  16.         private string LogPath = "C:\\Log\";
  17.         int TimeCount = 0;

  18.         public ELN2PDF()
  19.         {
  20.             InitializeComponent();

  21.             if (timer == null)
  22.             {
  23.                 timer = new System.Timers.Timer();
  24.                 timer.Enabled = true;
  25.                 timer.Interval = 10000; // 10秒
  26.                 timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
  27.             }
  28.         }

  29.         #region Events
  30.         protected override void OnStart(string[] args)
  31.         {
  32.             WriteLog("服务启动");
  33.             timer.Enabled = true;
  34.         }

  35.         protected override void OnStop()
  36.         {
  37.             WriteLog("服务停止");
  38.             timer.Enabled = false;
  39.         }
  40.         #endregion


  41.         #region Methods

  42.         private void WriteLog(string Msg)
  43.         {
  44.             StreamWriter swLog = new StreamWriter(LogPath + DateTime.Now.ToString("yyyyMMdd") + ".log", true);
  45.             swLog.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "  " + Msg);
  46.             swLog.Flush();
  47.             swLog.Close();
  48.         }

  49.         // 定时执行
  50.         private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
  51.         {
  52.             try
  53.             {
  54.                 TimeCount++;
  55.                 if (TimeCount > 2)
  56.                 {
  57.                     timer.Enabled = false;
  58.                     WriteLog("Run");
  59.                     RunELN2PDF();
  60.                 }
  61.             }
  62.             catch (Exception ex)
  63.             {
  64.                 WriteLog("Error: " + ex.Message);
  65.             }
  66.             finally
  67.             {
  68.                 timer.Enabled = true;
  69.             }
  70.         }

  71.         private void RunELN2PDF()
  72.         {
  73.             try
  74.             {
  75.                 string[] strFiles = Directory.GetFiles("C:\\Users\\Administrator\\Desktop\\XML\", "*.xml");
  76.                 WriteLog(strFiles.Length.ToString());
  77.                 for (int i = 0; i < strFiles.Length; i++)
  78.                 {
  79.                     string xmlPath = strFiles[i].ToString();
  80.                     string PDFPath = xmlPath.Substring(0, xmlPath.LastIndexOf(".")) + ".pdf";
  81.                     WriteLog(xmlPath);
  82.                     ExportToPDF(xmlPath, PDFPath, 0, "Portrait");
  83.                     File.Delete(xmlPath);
  84.                 }
  85.             }
  86.             catch (Exception ex)
  87.             {
  88.                 WriteLog("Error: " + ex.Message);
  89.             }
  90.         }

  91.         private void ExportToPDF(string xmlPath, string PDFPath, int PageCount, string Orientation)
  92.         {
  93.             try
  94.             {
  95.                 WriteLog(PDFPath);
  96.                 FpSpread fpSpread = new FpSpread();
  97.                 WriteLog(PDFPath);

  98.                 fpSpread.Open(xmlPath);
  99.                 int count = fpSpread.Sheets.Count - PageCount;
  100.                 WriteLog(count.ToString());
  101.                 if (count > 0)
  102.                 {
  103.                     for (int i = 0; i < count; i++)
  104.                     {
  105.                         SheetView view = fpSpread.Sheets[i];

  106.                         PrintInfo printset = new PrintInfo();
  107.                         printset.PrintToPdf = true;
  108.                         printset.PdfWriteMode = PdfWriteMode.Append;
  109.                         printset.PdfWriteTo = PdfWriteTo.File;
  110.                         printset.UseMax = true;
  111.                         printset.ShowRowHeader = PrintHeader.Hide;
  112.                         printset.ShowColumnHeader = PrintHeader.Hide;
  113.                         printset.ShowGrid = false;
  114.                         printset.ShowBorder = false;
  115.                         printset.ShowShadows = false;
  116.                         printset.ShowColor = true;
  117.                         printset.BestFitRows = false;
  118.                         printset.BestFitCols = false;
  119.                         printset.PdfFileName = PDFPath;
  120.                         printset.Footer = "";
  121.                         printset.Header = "";
  122.                         printset.PrintType = PrintType.CellRange;
  123.                         printset.RowStart = 0;
  124.                         printset.ColStart = 0;
  125.                         printset.RowEnd = view.GetLastNonEmptyRow(NonEmptyItemFlag.Style | NonEmptyItemFlag.Data);
  126.                         printset.ColEnd = view.GetLastNonEmptyColumn(NonEmptyItemFlag.Style | NonEmptyItemFlag.Data);

  127.                         if (Orientation == "Landscape")
  128.                         {
  129.                             printset.Orientation = PrintOrientation.Landscape;
  130.                         }
  131.                         else
  132.                         {
  133.                             printset.Orientation = PrintOrientation.Portrait;
  134.                         }

  135.                         view.PrintInfo = printset;
  136.                     }
  137.                     fpSpread.PrintSheet(-1);
  138.                 }
  139.             }
  140.             catch (Exception ex)
  141.             {
  142.                 WriteLog("Error: " + ex.Message);
  143.             }
  144.         }

  145.         #endregion

  146.     }
  147. }
复制代码

1 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-8-20 14:45:00
沙发
islands 你好

在WindowsService中以上代码到处PDF的功能会受到现在,因为在WindowsService中不允许显示模态对话框

另外一种实现方法是,创建一个Windows Forms程序,并添加导出PDF的代码,编译工程生成exe,然后通过Windows自带的【任务计划】功能来定时调用该exe
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部