⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ncore.cs

📁 利用C#实现的将Word文件转换为PDF的源代码。其中转换过程分为3步
💻 CS
📖 第 1 页 / 共 2 页
字号:
			catch (Exception e)
			{
				ErrorHalt(e.ToString());
				return 1;
			}
			return 0;
		}
		/// <summary>
		/// Save Dialogfeld, checkt gleichzeitig ob eine Source Datei angegeben wurde.
		/// Und erzeugt die KonversionID.
		/// </summary>
		/// <returns>0 wenn alees in ordnung ist, 1 bei einem Fehler</returns>
		public static int DestinationFile()
		{
			SaveFileDialog SFD	= new SaveFileDialog();
			//SFD.Filter = "Text Datei (*.txt)|*.txt";
			//SFD.Filter = SFD.Filter + "|Rich Text Format (*.rtf)|*.rtf";
			//SFD.Filter = SFD.Filter + "|Word Dokument (*.doc)|*.doc";		
			//SFD.Filter = SFD.Filter + "|HyperText Markup Language Datein(*.htm)|*.htm";
			//SFD.Filter = SFD.Filter + "|PowerPoint Datein(*.ppt)|*.ppt";
			SFD.Filter = /*SFD.Filter +*/ "Portables Dokumenten Format(*.pdf)|*.pdf";
			//SFD.Filter = SFD.Filter + "|Windows Meta File Datein(*.wmf)|*.wmf";
			//SFD.Filter = SFD.Filter + "|Erweiterte Meta File Datein(*.emf)|*.emf";
			//SFD.Filter = SFD.Filter + "|Windows Bitmap(*.bmp)|*.bmp";
			//SFD.Filter = SFD.Filter + "|Exchangeable Image File Format(*.exif)|*.exif";
			//SFD.Filter = SFD.Filter + "|Windows Icon(*.ico)|*.ico";
			//SFD.Filter = SFD.Filter + "|Joint Photographic Experts Group(*.jpg)|*.jpg";
			//SFD.Filter = SFD.Filter + "|Portable Network Graphics(*.png)|*.png";
			//SFD.Filter = SFD.Filter + "|Tagged Image File Format(*.tif)|*.tif";
			//SFD.Filter = SFD.Filter + "|Microsoft Exel Datei(*.xls)|*.xls";
			//SFD.Filter = SFD.Filter + "|Lotus 123 Datei(*.wk1,*.wk3,*.wk4)|*.wk*";
			//SFD.Filter = SFD.Filter + "|Windows Write Datei(*.wri)|*.wri";
			//SFD.Filter = SFD.Filter + "|Microsoft Works Datei(*.wps,*.wpt)|*.wp*";
			SFD.InitialDirectory = WorkDir;
			SFD.DefaultExt = "txt";
			if (SFD.ShowDialog() == DialogResult.OK)
			{
				if (scrfile==null) {SFD.Dispose();return 1;}
				dstfile = SFD.FileName;
				if (CreateCnvID()!=0) {SFD.Dispose();return 1;}
				SFD.Dispose();
				return 0;
			}
			else 
			{
				SFD.Dispose();
				return 1;}
		}

		/// <summary>
		/// Inizialisiert die Variablen (wie z.B. WorkDir) und checkt ob eine Office installiert ist.
		/// Ruft ErrorHalt auf wenn ein Fehler auftritt.
		/// </summary>
		public nCore()
		{
			try
			{
				Word.Application appW = new Word.Application(); 
				appW.Visible = false;
				appW.Quit(ref Unknown,ref Unknown,ref Unknown);

				PowerPoint.Application		 appP = new PowerPoint.Application();
				appP.Quit();

			}
			catch (Exception err)
			{
				ErrorHalt(err.ToString()+"\nOffice nicht richtig Installiert,\nterminiere Programm.");
			}
			WorkDir = System.Environment.CurrentDirectory;
			//CreateCnvID();//debug!
		}

		/// <summary>
		/// Führt die Konvertierung ohne User-Eingaben im silent mode aus.
		/// </summary>
		/// <param name="input">Source Datei</param>
		/// <param name="output">Target Datei</param>
		public nCore(string input,string output)
		{
			silent = true;
			// SID Marina, hier Session id zuweissen
			string SID = "UIJUZTREDSXCVBNM";

			WorkDir = System.Environment.CurrentDirectory;
			// Copy database
			Directory.CreateDirectory(Environment.GetEnvironmentVariable("TEMP")+"\\"+SID);
			File.Copy(WorkDir + "\\" + Database,Environment.GetEnvironmentVariable("TEMP")+"\\"+SID+"\\"+Database,true);
			WorkDir = Environment.GetEnvironmentVariable("TEMP")+"\\"+SID;
			scrfile = input;
			dstfile = output;
			CreateCnvID();
			DoCnv();
			Directory.Delete(Environment.GetEnvironmentVariable("TEMP")+"\\"+SID,true);
		}

		/// <summary>
		/// Checkt ob eine Konvertierung möglich ist
		/// </summary>
		/// <param name="from">id ders Source Dateityps</param>
		/// <param name="to"> id des Ziel Dateityps</param>
		/// <returns></returns>
		public static bool CheckCnv(int from,int to)
		{
			
			from = from << 8;
			from = from | to;		//id ist in from
			if (DoCnv(true)==0) return true; else return false;

		}


		/// <summary>
		/// Procedur die von der KonversionID ausgehend die passende Procedur aufruft.
		/// </summary>
		/// <returns>1 wenn ein Fehler aufgetreten ist.</returns>
		public static int DoCnv()
		{
			return DoCnv(false);
		}
		/// <summary>
		/// 
		/// </summary>
		/// <param name="check"></param>
		/// <returns></returns>
		public static int DoCnv(bool check)
		{
			switch (CnvID)
			{
				case RTF2PDF: if (!check)DoRTF2ALL(ExportFormatType.PortableDocFormat);break;
				case DOC2PDF:						if (!check)	DoHTM2PDF();break;
				default : return 1;
			}
			return 0;
		}

		/// <summary>
		/// 
		/// </summary>


		private static void DoHTM2PDF()
		{

			object Unknown =Type.Missing;

			Word.Application newApp = new Word.Application(); 
			newApp.Visible = false;

			object Source=scrfile;
			object Target=WorkDir + "\\temp2.rtf";
			scrfile=WorkDir + "\\temp2.rtf"; //You know the trick....

			newApp.Documents.Open(ref Source,ref Unknown, 
				ref Unknown,ref Unknown,ref Unknown, 
				ref Unknown,ref Unknown,ref Unknown, 
				ref Unknown,ref Unknown,ref Unknown, 
				ref Unknown,ref Unknown,ref Unknown,ref Unknown);

			object format = Word.WdSaveFormat.wdFormatRTF;// kein XML, nutzen?

			newApp.ActiveDocument.SaveAs(ref Target,ref format, 
				ref Unknown,ref Unknown,ref Unknown, 
				ref Unknown,ref Unknown,ref Unknown, 
				ref Unknown,ref Unknown,ref Unknown, 
				ref Unknown,ref Unknown,ref Unknown, 
				ref Unknown,ref Unknown);                    
			newApp.Quit(ref Unknown,ref Unknown,ref Unknown);
			DoRTF2ALL(ExportFormatType.PortableDocFormat);
			File.Delete(WorkDir + "\\temp2.rtf");
		}
		
	
		//der Weg, also rtf aufteilen teile in word in html
		// umwandeln, word signatur löschen, in powerpoint in 
		// emf umwandeln, in Access DB rein, als pdf ausgeben.
		private static void DoRTF2ALL(CrystalDecisions.Shared.ExportFormatType outTp)
		{
			int lastsplit = 0;
			int nextsplit = 0;
			int pageheight= 650;	//"Länge" unserer Seite
			int pcount= 1;
			Point xx;
			object Unknown =Type.Missing;
			Word.Application newApp;
			PowerPoint.Application	app;
			PowerPoint.Presentation ppp;
			string[] TempEnt;
			

			
			RichTextBox rtf = new RichTextBox();
			rtf.Height=25000;// nur page size required
			rtf.Width=4048;// Solle reichen
			//Console.WriteLine(rtf.Bounds.ToString());
			rtf.LoadFile(scrfile, RichTextBoxStreamType.RichText);
			nCoreHlp.EmptyDB(WorkDir + "\\" + Database);
			while ((lastsplit+1)<rtf.Text.Length) ////start page split
			{


				// die ersten paar seiten wegschneiden
				rtf.SelectionStart = 0;
				rtf.SelectionLength =lastsplit;
				rtf.Cut();
				for (int r=0;r<=rtf.Text.Length;r++) ////parse through whole text
				{
					xx = rtf.GetPositionFromCharIndex(r);
					nextsplit = rtf.Text.Length;
					if (int.Parse(xx.Y.ToString()) > pageheight){nextsplit=r-1;r=rtf.Text.Length;}
					
				}
				lastsplit=lastsplit+nextsplit;// ende wegschneiden
				rtf.SelectionStart = nextsplit;
				rtf.SelectionLength =rtf.Text.Length-nextsplit;
				rtf.Cut();
				rtf.SaveFile(WorkDir + "\\temp.rtf", RichTextBoxStreamType.RichText);
				///////////////////////////////////////////////////////////7////// insert db
				newApp = new Word.Application(); 
				newApp.Visible = false;

				object Source=WorkDir + "\\temp.rtf";
				object Target=WorkDir + "\\temp.html";

				newApp.Documents.Open(ref Source,ref Unknown, 
					ref Unknown,ref Unknown,ref Unknown, 
					ref Unknown,ref Unknown,ref Unknown, 
					ref Unknown,ref Unknown,ref Unknown, 
					ref Unknown,ref Unknown,ref Unknown,ref Unknown);

				object format = Word.WdSaveFormat.wdFormatHTML;// kein XML, nutzen?
				newApp.ActiveDocument.SaveAs(ref Target,ref format, 
					ref Unknown,ref Unknown,ref Unknown, 
					ref Unknown,ref Unknown,ref Unknown, 
					ref Unknown,ref Unknown,ref Unknown, 
					ref Unknown,ref Unknown,ref Unknown, 
					ref Unknown,ref Unknown);
				newApp.Quit(ref Unknown,ref Unknown,ref Unknown);
			
				//kill word head
				StreamReader sr;
				bool not=true;
				while (not)
				{
					try
					{

						sr = new StreamReader(WorkDir + "\\temp.html");
						not=false;
						StreamWriter sw = new StreamWriter(WorkDir + "\\temp.txt"); 
						String line;

						while ((line = sr.ReadLine()) != null) 
						{
							if (line.CompareTo("<meta name=ProgId content=Word.Document>")!=0)
								sw.WriteLine(line); else
								//line.Replace //Marina
								sw.WriteLine("<meta name=ProgId content=Word.Documens>");
						}

						sr.Close();
						sw.Flush();
						sw.Close();

					}
					catch (Exception e){e=e;}
				}// kill word head end
			
				File.Delete(WorkDir + "\\temp.html");
				File.Move(WorkDir + "\\temp.txt", WorkDir + "\\temp.html");
				//File.Delete(WorkDir + "\\temp.txt");				


				app = new PowerPoint.Application();
				ppp = app.Presentations.Open(WorkDir + "\\temp.html",
					/*Microsoft.Office.Core.MsoTriState.msoCTrue*/0,
					/*Microsoft.Office.Core.MsoTriState.msoTrue*/0,
					Microsoft.Office.Core.MsoTriState.msoFalse);//visible? immer no
				ppp.SaveAs(WorkDir + "\\temp",
					PowerPoint.PpSaveAsFileType.ppSaveAsEMF,
					Microsoft.Office.Core.MsoTriState.msoFalse);
				app.Quit();

				//output fangen
				TempEnt = Directory.GetFiles(WorkDir + "\\temp\\", "*.emf");
				nCoreHlp.InsertDB1(WorkDir + "\\" + Database,TempEnt[0],pcount);
				pcount++;
				Console.WriteLine("1 Page Converted");// debug
				//Console.ReadLine();
				//////////////////////////////////////////////////////////////// insert db off
				rtf.LoadFile(scrfile, RichTextBoxStreamType.RichText);

			}//////////// page split done
			///Create PDF
			ReportDocument doc = new ReportDocument();

			doc.Load(WorkDir + "\\DtoD.rpt");
			doc.Database.Tables[0].Location = (WorkDir + "\\DtoD.mdb");

			doc.ExportOptions.ExportFormatType = outTp;
			doc.ExportOptions.ExportDestinationType =ExportDestinationType.DiskFile;
			//DiskFileDestinationOptions
			DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions();
			diskOpts.DiskFileName = dstfile;
			doc.ExportOptions.DestinationOptions = diskOpts;
			doc.Export();
			doc.Close();
			Directory.Delete(WorkDir + "\\temp\\", true);
			File.Delete(WorkDir + "\\temp.rtf");
			File.Delete(WorkDir + "\\temp.html");
		}				
				


	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -