首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

asp.net 用靠山代码实现打印服务器的word文档

2012-08-01 
asp.net 用后台代码实现打印服务器的word文档功能说明:用户在网页上直接点击网页上的一个打印按钮,服务器

asp.net 用后台代码实现打印服务器的word文档
功能说明:

  用户在网页上直接点击网页上的一个打印按钮,服务器就直接打印相对应的word文档出来。。


兄弟姐妹们,有搞过的快帮忙一下。。先谢谢!

[解决办法]
服务器安装Word

以Com组件方式调用Word

具体实现可以找找网上的调用Excel或者Word的代码

要是自己试的话,先在引用里面添加Com引用,把Word添加进去,然后再实例化Word,打开文件,打印,退出。
[解决办法]
在网上找找有没有第三方的打印控件?
[解决办法]

C# code
 
///==============================================================

/// Office File Reader

///==============================================================

using System;

using System.Text;

using System.Runtime.InteropServices;


namespace OfficeFileReader
{
  #region Stuff you Dont even need to look at
  [Flags]

  public enum IFILTER_INIT
  {

    NONE = 0,

    CANON_PARAGRAPHS = 1,

    HARD_LINE_BREAKS = 2,

    CANON_HYPHENS = 4,

    CANON_SPACES = 8,

    APPLY_INDEX_ATTRIBUTES = 16,

    APPLY_CRAWL_ATTRIBUTES = 256,

    APPLY_OTHER_ATTRIBUTES = 32,

    INDEXING_ONLY = 64,

    SEARCH_LINKS = 128,

    FILTER_OWNED_VALUE_OK = 512

  }


  [Flags]

  public enum IFILTER_FLAGS
  {

    OLE_PROPERTIES = 1

  }


  public enum CHUNK_BREAKTYPE
  {

    CHUNK_NO_BREAK = 0,

    CHUNK_EOW = 1,

    CHUNK_EOS = 2,

    CHUNK_EOP = 3,

    CHUNK_EOC = 4

  }


  [Flags]

  public enum CHUNKSTATE
  {

    CHUNK_TEXT = 0x1,

    CHUNK_VALUE = 0x2,

    CHUNK_FILTER_OWNED_VALUE = 0x4

  }


  public enum PSKIND
  {

    LPWSTR = 0,

    PROPID = 1

  }


  [StructLayout(LayoutKind.Sequential)]

  public struct PROPSPEC
  {

    public uint ulKind;

    public uint propid;

    public IntPtr lpwstr;

  }


  [StructLayout(LayoutKind.Sequential)]

  public struct FULLPROPSPEC
  {

    public Guid guidPropSet;

    public PROPSPEC psProperty;

  }


  [StructLayout(LayoutKind.Sequential)]

  public struct STAT_CHUNK
  {

    public uint idChunk;

    [MarshalAs(UnmanagedType.U4)]
    public CHUNK_BREAKTYPE breakType;

    [MarshalAs(UnmanagedType.U4)]
    public CHUNKSTATE flags;

    public uint locale;

    [MarshalAs(UnmanagedType.Struct)]
    public FULLPROPSPEC attribute;

    public uint idChunkSource;

    public uint cwcStartSource;

    public uint cwcLenSource;

  }


  [StructLayout(LayoutKind.Sequential)]

  public struct FILTERREGION


  {

    public uint idChunk;

    public uint cwcStart;

    public uint cwcExtent;

  }


  #endregion

  [ComImport]

  [Guid("89BCB740-6119-101A-BCB7-00DD010655AF")]

  [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

  public interface IFilter
  {

    void Init([MarshalAs(UnmanagedType.U4)] IFILTER_INIT grfFlags,

        uint cAttributes,

        [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] FULLPROPSPEC[] aAttributes,

        ref uint pdwFlags);


    void GetChunk([MarshalAs(UnmanagedType.Struct)] out STAT_CHUNK pStat);


    [PreserveSig]
    int GetText(ref uint pcwcBuffer, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder buffer);


    void GetValue(ref UIntPtr ppPropValue);


    void BindRegion([MarshalAs(UnmanagedType.Struct)]FILTERREGION origPos, ref Guid riid, ref UIntPtr ppunk);

  }


  [ComImport]

  [Guid("f07f3920-7b8c-11cf-9be8-00aa004b9986")]

  public class CFilter
  {

  }


  public class Constants
  {

    public const uint PID_STG_DIRECTORY = 0x00000002;


    public const uint PID_STG_CLASSID = 0x00000003;

    public const uint PID_STG_STORAGETYPE = 0x00000004;


    public const uint PID_STG_VOLUME_ID = 0x00000005;

    public const uint PID_STG_PARENT_WORKID = 0x00000006;

    public const uint PID_STG_SECONDARYSTORE = 0x00000007;


    public const uint PID_STG_FILEINDEX = 0x00000008;

    public const uint PID_STG_LASTCHANGEUSN = 0x00000009;

    public const uint PID_STG_NAME = 0x0000000a;

    public const uint PID_STG_PATH = 0x0000000b;


    public const uint PID_STG_SIZE = 0x0000000c;

    public const uint PID_STG_ATTRIBUTES = 0x0000000d;

    public const uint PID_STG_WRITETIME = 0x0000000e;

    public const uint PID_STG_CREATETIME = 0x0000000f;

    public const uint PID_STG_ACCESSTIME = 0x00000010;

    public const uint PID_STG_CHANGETIME = 0x00000011;


    public const uint PID_STG_CONTENTS = 0x00000013;

    public const uint PID_STG_SHORTNAME = 0x00000014;


    public const int FILTER_E_END_OF_CHUNKS = (unchecked((int)0x80041700));

    public const int FILTER_E_NO_MORE_TEXT = (unchecked((int)0x80041701));

    public const int FILTER_E_NO_MORE_VALUES = (unchecked((int)0x80041702));


    public const int FILTER_E_NO_TEXT = (unchecked((int)0x80041705));

    public const int FILTER_E_NO_VALUES = (unchecked((int)0x80041706));


    public const int FILTER_S_LAST_TEXT = (unchecked((int)0x00041709));

 
  }
  public class OfficeFileReader
  {
    public void GetText(String path,ref string text)
      // path is the path of the .doc, .xls or .ppt  file
      // text is the variable in which all the extracted text will be stored
    {
      String result = "";


      int count = 0;
      try
      {
        IFilter ifilt = (IFilter)(new CFilter());
        //System.Runtime.InteropServices.UCOMIPersistFile ipf = (System.Runtime.InteropServices.UCOMIPersistFile)(ifilt);
        System.Runtime.InteropServices.ComTypes.IPersistFile ipf= (System.Runtime.InteropServices.ComTypes.IPersistFile)(ifilt);
        ipf.Load(@path, 0);
        uint i = 0;
        STAT_CHUNK ps = new STAT_CHUNK();
        ifilt.Init(IFILTER_INIT.NONE, 0, null, ref i);
        int hr = 0;
     
        while (hr == 0)
        {
       
            ifilt.GetChunk(out ps);
            if (ps.flags == CHUNKSTATE.CHUNK_TEXT)
            {
              uint pcwcBuffer = 1000;
              int hr2 = 0;
              while (hr2 == Constants.FILTER_S_LAST_TEXT || hr2 == 0)
              {
                try
                {
                  pcwcBuffer = 1000;
                  System.Text.StringBuilder sbBuffer = new StringBuilder((int)pcwcBuffer);
                  hr2 = ifilt.GetText(ref pcwcBuffer, sbBuffer);
                  // Console.WriteLine(pcwcBuffer.ToString());
                  if (hr2 >= 0) result += sbBuffer.ToString(0, (int)pcwcBuffer);
                  //textBox1.Text +="\n";
                  // result += "#########################################";
                  count++;
                }
                catch (System.Runtime.InteropServices.COMException myE)
                {
                  Console.WriteLine(myE.Data + "\n" + myE.Message + "\n");

                }
              }
            }
       
        }
     
      }
      catch (System.Runtime.InteropServices.COMException myE)
      {
        Console.WriteLine(myE.Data + "\n" + myE.Message + "\n");

      }

      text = result;
      //return count;
return;

    }
  }

}


提取DOC文件内容
[解决办法]
///public static void Main()
///{
/// OfficeFileReader.OfficeFileReader objOFR = new OfficeFileReader.OfficeFileReader()
/// string output="";
/// objOFR.GetText("C:\\MyWordFile.Doc", ref output);
/// Console.WriteLine(output);
///}


[解决办法]
//1.定义文档类型、字符编码
Response.Clear();
Response.Buffer = true;
Response.Charset = "utf-8";
//下面这行很重要, attachment 参数表示作为附件下载,您可以改成 online在线打开
//filename=FileFlow.doc 指定输出文件的名称,注意其扩展名和指定文件类型相符,可以为:.doc || .xls || .txt ||.htm
Response.AppendHeader("Content-Disposition", "online;filename=Paper.doc");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
//Response.ContentType指定文件类型 可以为application/ms-excel || application/ms-word || application/ms-txt || //application/ms-html || 或其他浏览器可直接支持文档
Response.ContentType = "application/ms-word";
this.EnableViewState = false;
//2.定义一个输入流
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
//3.将目标数据绑定到输入流输出
this.panel.RenderControl(oHtmlTextWriter);
//this 表示输出本页,你也可以绑定datagrid,或其他支持obj.RenderControl()属性的控件
Response.Write(oStringWriter.ToString());
Response.End();
//toFiles(1);
[解决办法]
至少对我有用谢了
[解决办法]
至少对我有用谢了
[解决办法]
帮忙顶下

热点排行