精华内容
下载资源
问答
  • c#导出PDF

    2011-08-25 11:52:00
    2、 单击菜单“文件”→“新建”→“项目”,在项目类型中选择“Vis l C#项目”,在模板中选择“控制台应用程序”,输入文件名称如“MakePdf”,指定好存放路径,然后点确定按钮; 3、 在“解决方案资源管理器”中...

    转载:http://lulijuan505.blog.163.com/blog/static/3083691120097284393259/ 

    PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜去,都转贴的是同一段“暴力”破解的方法,代码片断如下:

    StreamWriter pPDF=new StreamWriter(filePath);

    ArrayList xRefs=new ArrayList();

    float yPos =0f;

    long streamStart=0;

    long streamEnd=0;

    long streamLen =0;

    string strPDFMessage=null;

    //PDF文档头信息

    strPDFMessage="%PDF-1.1\n";

    ConvertToByteAndAddtoStream(strPDFMessage);

    xRefs.Add(mPDF.Length);

    strPDFMessage="1 0 obj\n";

    ConvertToByteAndAddtoStream(strPDFMessage);

    strPDFMessage="<< /Length 2 0 R >>\n";

    ConvertToByteAndAddtoStream(strPDFMessage);

    strPDFMessage="stream\n";

    ConvertToByteAndAddtoStream(strPDFMessage);

    ……

    看了上面的制作办法,我眼镜都摔坏了三幅,如果用上面这样原始的办法能制作出满意的PDF文件,那一定是天才所为。后来,我从一个网站(网址:http://itextsharp.sourceforge.net/index.html)中看到了专门制作PDF文件的控件的介绍,暗喜之余,立马下载试验,果然非常轻松地制作出了想要的PDF文件,因为网站为英文,内容又多,读起来非常费力,在解决了自己的问题后,看到许多网友还在为PDF文件制作而郁闷,遂决定将该内容翻译为中文,由于本人英语水平一般,许多地方又晦涩难懂,故翻译质量不是很满意,敬请斧正,但大部分能看懂。本文的目的一是解决部分网友的燃眉之急,二是抛砖引玉,如果哪位仁兄愿意将该网站中的内容准确翻译出来,则是天下之大幸。

    要用本文的方法生成PDF文件,需要两个控件:itextsharp.dll和ICSharpCode.SharpZipLib.dll,由于示例代码实在太多,我将代码全部整理出来,放在另外一个文件“示例代码.doc”中,所有这些资源,我均放在了本人的ftp站点(ftp://202.107.251.26)上的“Pdf文件制作全攻略”文件夹中(文件夹中另外两个rar压缩文件为两个控件的源代码,供大家学习研究使用),你可以到这里下载相应的资源,或者直接到原网站下载。

    为便于调试和叙述,所有例子均为DOS控制台程序,windows程序使用方法完全一样,按照下面的步骤创建一个可调试的项目:

    1、 打开VS2003;

    2、 单击菜单“文件”→“新建”→“项目”,在项目类型中选择“Vis l C#项目”,在模板中选择“控制台应用程序”,输入文件名称如“MakePdf”,指定好存放路径,然后点确定按钮;

    3、 在“解决方案资源管理器”中右键单击“引用”,从弹出的菜单中选择“添加引用”,在“.NET”选项夹中选择“浏览”,添加前面提到的两个应用,如下图:

    4、 在代码窗口顶部添加两个引用:

    using iTextSharp.text;

    using iTextSharp.text.pdf;

    至此,准备工作完毕。

    第一部分 iText的简单应用

    第一章 创建一个Document

    利用iText五步创建一个PDF文件:helloword。

    第一步,创建一个 iTextSharp.text.Document对象的实例:

    Document document = new Document();

    第二步,为该Document创建一个Writer实例:

    PdfWriter.getInstance(document, new FileStream("Chap0101.pdf", FileMode.Create));

    第三步,打开当前Document

    document.Open();

    第四步,为当前Document添加内容:

    document.Add(new Paragraph("Hello World"));

    第五步,关闭Document

    document.Close();

    完整的代码见示例代码0101。

    在例中,不难看出,制作一个PDF文件是非常简单的。

    注:如果你将例中“document.Add(new Paragraph("Hello World"));”中的字符串“Hello Word”换成中文,如“这是我的第一个PDF文件”,产生的结果一定让你大失所望,因为生成的PDF文件中并没有将中文显示出来,不要担心,在第9章中要专门讲解字体问题,中文显示也就迎刃而解了,如果不能正确显示中文,也就没有必要翻译本文了。

    下面对这几步做详细介绍。

    第一步 创建一个Document实例:

    iTextSharp.text.Document-object共有三个构造函数:

    p lic Document();

    p lic Document(Rectangle pageSize);

    p lic Document(Rectangle pageSize,

    int marginLeft,

    int marginRight,

    int marginTop,

    int marginBottom);

    第一个构造函数以A4页面作为参数调用第二个构造函数,第二个构造函数以每边36磅页边距为参数调用第三个构造函数

    u 页面尺寸:

    你可以通过指定的颜色和大小创建你自己的页面,示例代码0102创建一个细长的浅黄色背景的页面:

    Rectangle pageSize = new Rectangle(144, 720);

    pageSize.BackgroundColor = new Color(0xFF, 0xFF, 0xDE);

    Document document = new Document(pageSize);

    通常,你不必创建这样的页面,而可以从下面页面尺寸中选择:

    A0-A10, LEGAL, LETTER, HALFLETTER, _11x17, LEDGER, NOTE, B0-B5, ARCH_A-ARCH_E, FLSA 和 FLSE

    大多数情况下使用纵向页面,如果希望使用横向页面,你只须使用rotate()函数:

    Document document = new Document(PageSize.A4.rotate());

    详细代码见示例代码0103。

    u 页边距:

    当创建一个文件时,你还可以定义上、下、左、右页边距:

    Document document = new Document(PageSize.A5, 36, 72, 108, 180);

    在示例代码0104中你可以看到该文档有一个0.5英寸的左边距和1英寸的右边距,上边距为1.5英寸,下边距为2.5英寸。

    说明:

    当创建一个矩形或设置边距时,你可能希望知道该用什么度量单位:厘米、英寸或象素,事实上,默认的度量系统以排版单位磅为基础得出其他单位的近似值,如1英寸=72磅,如果你想在A4页面的PDF中创建一个矩形,你需要计算以下数据:

    21 厘米 / 2.54 = 8.2677 英寸

    8.2677英寸* 72 = 595 磅

    29.7 厘米 / 2.54 = 11.6929 英寸

    11.6929英寸* 72 = 842 磅

    默认边距为36磅即半英寸。

    如果你修改了页面尺寸,仅仅影响到下一页,如果你修改了页边距,则影响到全部,故慎用。

    关于页面的初始值,请参考第三步。

    第二步 创建Writer实例

    一旦创建了document,我们可以创建该文档的多个Writer的实例,所有这些Writer实例均继承自抽象类“iTextSharp.text.DocWriter”。

    同时还有另外一种情况,你可以用iTextSharp.text.pdf.PdfWriter产生文档PDF文件,如果你想创建一个TeX文档,你可以使用iTextSharp.text.TeX.TeXWriter包。

    Writer类的构造函数是私有的,你只能通过下面的方法创建一个实例:

    p lic static xxxWriter getInstance(Document document, Stream os);(xxx 是 Pdf 或 Xml)

    你可以通过下面的方法创建一个实例:

    PdfWriter writer = PdfWriter.getInstance(document, new FileStream("Chap01xx.pdf"));

    但是你几乎永远不会用到Writer实例(除非你想创建高级PDF或者希望用一些非常特殊的函数,如ViewerPreferences 或 Encryption)。所以通过下面的办法得到实例已经足够了: PdfWriter.getInstance(document, new FileStream("Chap01xx.pdf"));

    在第一步中创建一个文档时,第一个参数意义不大,第二个参数可以是任何一种流,到目前为止我们一直使用System.IO.FileStream将Document写入文件中,示例代码0105用到了System.IO.MemoryStream(这不是一个独立的例子,你必须在Servlet Engine中测试这些代码。

    第三步 打开Document

    u 摘要

    在你写入任何实际数据之前,你可能希望通过以下几种方法写入一些关于本文档的摘要:

    p lic boolean addTitle(String title)

    p lic boolean addS ject(String s ject)

    p lic boolean addKeywords(String keywords)

    p lic boolean addAuthor(String author)

    p lic boolean addCreator(String creator)

    p lic boolean addProd?r()

    p lic boolean addCreationDate()

    p lic boolean addHeader(String name, String content)

    你可以选择自己的标题、主题、关键字、作者、创建程序,但以下产品信息将始终被添加:iTextSharp (或者iTextSharp的引用)和创建时间(实际上这两种方法是自动调用的)。

    你还可以将自定义的名称添加为“报头信息”,但是这对于PdfWriter没有任何作用,如果看看实例代码0101产生的pdf文件的“文档属性”,我们可以看到仅仅有PDF创建程序和产品日期,而示例代码0106的“文档属性”框中有更多的信息。

    打开document前要做的事:

    你只能在Open方法调用之前添加摘要,这是iText开发工具提供的一个选择。

    在HTML中,报头信息被放在文档前面报头标识中间,调用Open方法将导致报头信息写入流,因而在Document被打开后无法更改这些数据。

    PDF报头信息不包括摘要,看起来有类似于:

    %PDF-1.2

    该行显示生成的文档是一个版本为1.2的PDF格式的文件,在PDF中,摘要保存在PdfInfo对象中,当文档关闭时已经写入PdfWriter中了,因此,没有关于为什么不能修改库来满足任何时候添加或更改摘要的技术原因

    u 页面初始化

    Open方法在不同的Witer中同时会产生初始化事件,举例来说,如果你需要一个水印或者页眉页角对象出现在文档第一页的开始处,你需要在打开文档前添加这些,同样的用于设置该文档其他页水印、页眉、页角、页数和尺寸。

    当调用下列方法:

    p lic bool setPageSize(Rectangle pageSize)

    p lic bool Add(Watermark watermark)

    p lic void removeWatermark()

    setting Header property

    p lic void resetHeader()

    setting Footer property

    p lic void resetFooter()

    p lic void resetPageCount()

    setting PageCount property

    产生的结果只能在下一个新页中看到(当在本页调用初始化方法时),代码见示例代码0107,你必须要准备一张名为watermark.jpg的图片,如下图:

    u 阅读器参数:

    你可以通过下面的办法为PDF文件指定一些阅读器 (如Adobe Reader) 参数:

    p lic void setViewerPreferences(int preferences)

    在示例代码0108中,指定了下面一些参数:

    writerA.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft);

    writerB.setViewerPreferences(PdfWriter.HideMen ar | PdfWriter.HideToolbar);

    writerC.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft | PdfWriter.PageModeFullScreen | PdfWriter.NonFullScreenPageModeUseThumbs);

    正如你所看到的,参数可以使用以下一些常量:

    l 文件被打开时,页面布局用到下面的其中一个 :

    PdfWriter.PageLayoutSinglePage – 同时只显示一个页面

    PdfWriter.PageLayoutOneColumn –单列显示

    PdfWriter.PageLayoutTwoColumnLeft –双列显示,奇数页在左

    PdfWriter.PageLayoutTwoColumnRight -双列显示,奇数页在右

    l 文件打开时,页面模式用到下面其中之一:

    PdfWriter.PageModeUseNone – 既不显示大钢也不显示缩略图

    PdfWriter.PageModeUseOutlines – 显示大纲

    PdfWriter.PageModeUseThumbs – 显示缩略图

    PdfWriter.PageModeFullScreen – 全屏模式,没有菜单、windows控件或者其他任何windows可见控件

    l PdfWriter.HideToolbar – 当文档激活时,是否隐藏阅读程序(如Adobe Reader)的工具条

    l PdfWriter.HideMen ar -当文档激活时,是否隐藏阅读程序的菜单.

    l PdfWriter.HideWindowUI -当文档激活时,是否隐藏阅读程序的界面元素,如滚动条、导航条等,而仅仅保留文档显示

    l PdfWriter.FitWindow – 是否调整文档窗口尺寸以适合显示第一页。

    l PdfWriter.CenterWindow – 是否将文档窗口放到屏幕中央

    l 在全屏模式下,指定如何显示界面元素(选择一个)

    PdfWriter.NonFullScreenPageModeUseNone -既不显示大钢也不显示缩略图

    PdfWriter.NonFullScreenPageModeUseOutlines – 显示大钢

    PdfWriter.NonFullScreenPageModeUseThumbs – 显示缩略图

    说明:你只能在类PdfWriter中调用这些方法。

    u 加密

    打开文档之前还要做的一件事情就是加密(如果你希望该文档加密),要达到这个目的,你可以使用下面的方法:

    p lic void setEncryption(boolean strength, String userPassword, String ownerPassword, int permissions);

    strength 是下面两个常量之一:

    PdfWriter.STRENGTH40BITS: 40 位

    PdfWriter.STRENGTH128BITS: 128位 (Acrobat Reader 5.0及以上版本支持)

    UserPassword和ownerPassword 可以为空或零长度, 这种情况下, ownerPassword 将被随机的字符串代替

    Permissions 为下列常量之一:

    PdfWriter.AllowPrinting

    PdfWriter.AllowModifyContents

    PdfWriter.AllowCopy

    PdfWriter.AllowModifyAnnotations

    PdfWriter.AllowFillIn

    PdfWriter.AllowScreenReaders

    PdfWriter.AllowAssembly

    PdfWriter.AllowDegradedPrinting

    该功能参见示例代码0109和示例代码0110。

    writer.setEncryption(PdfWriter.STRENGTH40BITS, null, null, PdfWriter.AllowCopy);

    示例代码0109产生的文件能够被打开而无须密码,但用户不能打印、修改本文档。

    writer.setEncryption(PdfWriter.STRENGTH128BITS, "userpass", "ownerpass", PdfWriter.AllowCopy | PdfWriter.AllowPrinting);

    打你试图打开示例代码0110产生的文件时,将要求输入密码('userpass'),因为添加了AllowPrinting参数,你可以打印该文档而不会发生任何问题。

    第四步 添加内容

    在解释第一步到第三步的不同示例中,你可能已经遇到了一些对象如Phrase, Paragraph等 在接下来的几章中,所有这些问题都将得到详细解释。

    有时你可能想一个writer故意忽略document产生的行为,如示例代码0111:

    当我们创建了两个writer: writerA 和 writerB:

    PdfWriter writerA = PdfWriter.getInstance(document, new FileStream("Chap0111a.pdf", FileMode.Create));

    PdfWriter writerB = PdfWriter.getInstance(document, new FileStream("Chap0111b.pdf", FileMode.Create));

    我们可以创建两个有细微差别的文档:

    writerA.Pause();

    document.add(new Paragraph("This paragraph will only be added to Chap0111b.pdf, not to Chap0111a.pdf"));

    writerA.resume();

    你可以比较文件: Chap0111a.pdf和Chap0111b.pdf的区别

    第五步,关闭 document

    关闭 document 非常重要, 因为它将关闭正在运行的Writer并将内容写入文件,该方法在最后被调用,你应该总是要关闭文档。

    高级话题:阅读PDF文件

    该部分内容介绍了iText只能产生PDF格式的文件而不能解析PDF格式文件,不再翻译。

    第二章 块、短句和段落

    块(Chunk)是能被添加到文档的文本的最小单位,块可以用于构建其他基础元素如短句、段落、锚点等,块是一个有确定字体的字符串,要添加块到文档中时,其他所有布局变量均要被定义。下面一行中,我们创建了一个内容为“hello World”、红色、斜体、COURIER字体、尺寸20的一个块:

    Chunk chunk = new Chunk("Hello world", FontFactory.getFont(FontFactory.COURIER, 20, Font.ITALIC, new Color(255, 0, 0)));

    u 典型字体1:

    在本指南中,除了第九章外(你可以在这里学会使用其他字体),我们将始终使用典型字体1,这些是不同的典型字体1:

    · Courier (该字体定宽)

    · Helvetica

    · Times Roman

    · Symbol

    · ZapfDingbats

    u 下划线/删除线

    如果你希望一些块有下划线或删除线,你可以通过改变字体风格简单做到:

    Chunk chunk1 = new Chunk("This text is underlined", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.UNDERLINE));

    Chunk chunk2 = new Chunk("This font is of type ITALIC | STRIKETHRU", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.ITALIC | Font.STRIKETHRU));

    u 上标/下标

    在块中有几个方法可以调用,其中大部分将在接下来的章节中介绍,本章中只介绍一个方法 setTextRise(float f). 你可以使用该方法在上标或下标中写块。

    u 块的背景

    如果你想改变块的背景,你可以使用方法setBackground(Color color). 这将在块文本的下面添加一个彩色矩形:

    ck.setBackground(new Color(0xFF, 0xFF, 0x00));

    在示例代码0101中,你可以概览典型字体1和一个使用setTextRise, setBackground等方法的的例子。

    短句

    短句(Phrases)是一系列以特定间距(两行之间的距离)作为参数的块,一个短句有一个主字体,但短句中的一些块具有不同于主字体的字体,你有更多的选择去创建短句,一些具体使用参见代码0202。

    u 古希腊语

    因为古希腊语经常使用,在类Phrase的构造函数中有一个特征:将一个字符串作为参数(如果你想避免这种情况,你只能使用块工作而不能使用字符串),正如你在示例代码0203中看到的,这个特征自动地将913至937(除903)和945至969(古希腊的ASCII值)范围内的所有字体改为希腊符号。

    u 非主要性

    与其说这是一个特征,不如说是一个缺陷,但无论如何,这使创建一个非主要性的短句或段落成为可能,这将产生一个由下向上书写的临时作用(参见示例代码0204)。如果你想在一页中将一些位置移动到上面时可能有用。

    说明,当你穿越上边届时无法检查,也没有办法让你回到前一页。

    段落

    段落是一系列块和(或)短句。同短句一样,段落有确定的间距。用户还可以指定缩排;在边和(或)右边保留一定空白,段落可以左对齐、右对齐和居中对齐。添加到文档中的每一个段落将自动另起一行。有几种办法建立一个段落,如:

    Paragraph p1 = new Paragraph(new Chunk("This is my first paragraph.", FontFactory.getFont(FontFactory.HELVETICA, 12)));

    Paragraph p2 = new Paragraph(new Phrase("This is my second paragraph.", FontFactory.getFont(FontFactory.HELVETICA, 12)));

    Paragraph p3 = new Paragraph("This is my third paragraph.", FontFactory.getFont(FontFactory.HELVETICA, 12));

    所有有些对象将被添加到段落中:

    p1.add("you can add strings, "); p1.add(new Chunk("you can add chunks ")); p1.add(new Phrase("or you can add phrases."));

    说明:一个段落有一个且仅有一个间距,如果你添加了一个不同字体的短句或块,原来的间距仍然有效,你可以通过SetLeading来改变间距,但是段落中所有内容将使用新的中的间距。见示例代码0205。

    u 保持段落的整体性

    在示例代码0206中,我们使用了setKeepTogether(tr)方法来试图将一个段落放在同一页中,该方法并不是始终有效,举个例子,第一段不能刚好在一页中,于是被分成了两部分。第二段被放置在第二页,但第三段顺沿到了第三页上。

    字体的延续

    你应该掌握字体延续的一些规则,这些规则的应用见示例代码0207,当我们将一些内容用指定的字体(非默认字体)创建一个短句或者段落后再添加更多内容时,初始对象的字体风格将被延续,请看“Hello 1!”和“Hello 2”:

    Phrase myPhrase = new Phrase("Hello 2! ", new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD));

    myPhrase.Add(new Phrase("some other font ", new Font(Font.HELVETICA, 8, Font.ITALIC)));

    myPhrase.Add(new Phrase("This is the end of the sentence.\n", new Font(Font.TIMES_NEW_ROMAN, 8, Font.ITALIC)));

    document.Add(myPhrase);

    我们由Times New Roman 粗体字开始,添加一些文本使用Helvetica字体而不指定风格,我们发现文本被改变成了粗体,当我们再加一些文本使用Times New Roman字体和斜体风格,结果变成了粗斜体。

    如果我们使用FontFactory来创建字体,字体风格不会被延续,因为FontFactory使用了另外的技术构建一个字体:

    myPhrase = new Phrase("Hello 1bis! ", FontFactory.getFont(FontFactory.TIMES_NEW_ROMAN, 8, Font.BOLD));

    myPhrase.Add(new Phrase("some other font ", FontFactory.getFont(FontFactory.HELVETICA, 8, Font.ITALIC)));

    myPhrase.Add(new Phrase("This is the end of the sentence.\n", FontFactory.getFont(FontFactory.TIMES_NEW_ROMAN, 8, Font.ITALIC)));

    document.Add(myPhrase);

    在上面的代码中,使用Helvetica字体的文本风字体没有指定(既不是粗体也不是斜体)。采用Times New Roman的额外文本仅仅显示为斜体。

    你也看到我们添加了一个段落,添加该段落就如同一个短句。

    Paragraph myParagraph = new Paragraph("Hello 1! ", new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD));

    myParagraph.Add(new Paragraph("This is the end of the sentence.",FontFactory.getFont(new Font.TIMES_NEW_ROMAN, 8)));

    document.Add(myParagraph);

    你可以不这样做,但将失去字体风格的延续,首先不用任何字体创建段落(例中我们仅仅给字体出间距为1.5倍),然后添加内容的不同部分。

    myParagraph = new Paragraph(12);

    myParagraph.Add(new Paragraph("Hello 3! ", new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD)));

    myParagraph.Add(new Paragraph("This is the end of the sentence.", new Font(Font.TIMES_NEW_ROMAN, 8, Font.ITALIC)));

    document.Add(myParagraph);

    如果你使用了Phrase对象,你同样会失去字体风格的延续:

    myPhrase = new Phrase(12);

    myPhrase.Add(new Phrase("Hello 4! ", new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD)));

    myPhrase.Add(new Phrase("This is the end of the sentence.", newFont(Font.TIMES_NEW_ROMAN, 8, Font.ITALIC)));

    document.Add(myPhrase);

    u 更改分割符

    通常,当文本不能放在一行时,文本将被分割成不同的部分,iText首先会查找分割符,如果没有找到,文本将在行尾被截断。有一些预定的分割符如“ ”空格和“-”连字符,但是你可以使用setSplitCharacter方法来覆盖这些默认值。在示例代码0208中,你可以看到当到达行尾时一个块是如何被分割的。然后分隔符被改成点“.”,该行在该字符处被分割。

    第三章 锚点、列表和注释

    锚点

    我们都知道HTML中的超文本链接,当我们点击某些语句,你能够跳转到网上的其他页。在PDF中也可以实现这种功能。事实上,在第十一章整个章节中有关于PDF链接的介绍,但这是iText的更高级的应用,本章中我们处理简单的iText。

    如果你想在文档中添加一个外部链接(例如使用URL链接到WEB上的其他文档),你可以简单地使用Anchor对象,它派生于Phrase对象,使用方法相同。只有两种额外方法定义两种额外变量:setName和 setReference。

    外部链接示例:

    Anchor anchor = new Anchor("website", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.UNDERLINE, new Color(0, 0, 255)));

    anchor.Reference = "http://itextsharp.sourceforge.net";

    anchor.Name = "website";

    如果你想添加内部链接,你需要选择该链接不同的名称,就象你相位在HTML中利用名称作为锚点一样。为达到该目的,你需要添加一个“#”。

    内部链接示例:

    Anchor anchor1 = new Anchor("This is an internal link");

    anchor1.Name = "link1";

    Anchor anchor2 = new Anchor("Click here to jump to the internal link");

    anchor.Reference = "#link1";

    这两个链接的例子请见示例代码0301。

    列表

    通过类List 和ListItem,你可以添加列表到PDF文件中,对于列表你还可以选择是否排序。

    排序列表示例:

    List list = new List(tr, 20);

    list.Add(new ListItem("First line"));

    list.Add(new ListItem("The second line is longer to see what happens once the end of the line is reached. Will it start on a new line?"));

    list.Add(new ListItem("Third line"));

    结果如下:

    First line

    The second line is longer to see what happens once the end of the line is reached. Will it start on a new line?

    Third line

    不排序示例如下:

    List overview = new List(false, 10);

    overview.Add(new ListItem("This is an item"));

    overview.Add("This is another item");

    结果如下:

    This is an item

    This is another item

    你可以通过setListSymbol方法更改列表符号:

    // 用字符串作为列表符号

    list1.ListSymbol = "*";

    // 用Chunk 作为列表符号(包含“?”字符)

    list2.ListSymbol = new Chunk("\?", FontFactory.getFont(FontFactory.HELVETICA, 20));

    //用图片作为列表符号

    list3.ListSymbol = new Chunk(Image.getInstance("myBullet.gif"), 0, 0);

    还可以使用setIndentationLeft和setIndentationRight方法设置缩排,列表符号的缩排在构造函数中设置。更多的例子请参见示例代码0302。

    注释

    iText支持不同风格的注释。

    u 文本注释:

    你可以添加一小段文本到你的文档中,但它并非文档内容的一部分,注释有标题和内容:

    Annotation a = new Annotation(

    "authors",

    "Maybe it's because I wanted to be an author myself that I wrote iText.");

    u 外部链接注释:

    你需要指定一个可点击的矩形和一个字符串(URL描述)或URL对象:

    Annotation annot = new Annotation(100f, 700f, 200f, 800f, new URL("http://www.lowagie.com"));

    Annotation annot = new Annotation(100f, 700f, 200f, 800f, "http://www.lowagie.com");

    u 外部PDF文件链接注释:

    你需要指定一个可点击的矩形和一个字符串(文件名称)和目的文件或页码。

    Annotation annot = new Annotation(100f, 700f, 200f, 800f, "other.pdf", "mark");

    Annotation annot = new Annotation(100f, 700f, 200f, 800f, "other.pdf", 2);

    u 指定行为链接注释

    你需要指定一个可点击的矩形和一个指定的行为:

    Annotation annot = new Annotation(100f, 700f, 200f, 800f, PdfAction.FIRSTPAGE);

    u 应用程序链接注释:

    你需要指定一个可点击的矩形和一个应用程序:

    Annotation annot = new Annotation(300f, 700f, 400f, 800f, "C://winnt/notepad.exe", null, null, null);

    我们无须在页面上指定一个位置,iText会内部处理。你能够看到iText添加文本注释在页面上当前位置下面,第一个在段后第一行下面,第二个在短句结束处的下面。

    所有其他注释需要指定想匹配的矩形区域,在示例代码0304中,我们画了一些正方形(使用的函数将在第十章中介绍),为每个正方形添加了一些链接注释。

    第四章 页眉页脚、章节、区域和绘图对象

    使用在第三至第五章中描述的大量简单iText对象可以避免更多的高级话题(第九至十二章),紧记这些简单对象限制的功能,大量复杂的功能在第三部分。

    页眉页脚

    HeaderFooter对象可以于为文档每页添加页眉和页脚。这样一个页眉或页脚包含一个标准的短句(如果需要)和当前页码,如果你需要更多复杂的页眉和页脚(使用表格或者第几页共几页),请阅读第十二章。

    在示例代码0401中,你可以看到我们首先添加了一个包含页码没有任何边框的页脚。

    HeaderFooter footer = new HeaderFooter(new Phrase("This is page: "), tr);

    footer.Border = Rectangle.NO_BORDER;

    document.Footer = footer

    我们还可以使用下面的构造函数:

    HeaderFooter footer = new HeaderFooter(new Phrase("This is page "), new Phrase("."));

    构造函数知道你希望添加一个页码和将其放置在两个短句间,如果你只是设置一个HeaderFooter而不改变边框,页眉或页脚的文本上下各有一条直线。

    HeaderFooter header = new HeaderFooter(new Phrase("This is a header without a page number"), false);

    document.Header = header;

    章节和区域

    在第十一章中将描述如何构建一个树的外观,如果你只需要一个简单的章节和(子)区域,你可以用Chapter对象和Section对象自动构建一个树:

    Paragraph cTitle = new Paragraph("This is chapter 1", chapterFont);

    Chapter chapter = new Chapter(cTitle, 1);

    Paragraph sTitle = new Paragraph("This is section 1 in chapter 1", sectionFont);

    Section section = chapter.addSection(sTitle, 1);

    在示例代码0402中,我们添加了一系列的章节和子区域,你可以看到完整的树形,树形结构默认打开,如果你希望部分节点关闭,你必须使用用BookmarkOpen属性其值为false,详见示例代码0403。

    图形

    如果你想添加图形,如直线、圆、几何窗体,你应该阅读读十章,但如果你只需要一些有限的功能,你可以使用Graphic对象

    Graphic grx = new Graphic();

    //添加一个矩形

    grx.rectangle(100, 700, 100, 100);

    // 添加一条斜线

    grx.moveTo(100, 700);

    grx.lineTo(200, 800);

    // 将图形显示出来

    grx.stroke();

    document.Add(grx);

    完整的代码请见示例代码0404,如果想看到全部的方法,请参见PdfContentByte对象API。

    当你想给页面加一个边框或者在文本当前位置画一条水平线时,图形对象非常有用。下面的方法用指定的宽度、间距(如果需要)和颜色画一个边框。

    p lic void setBorder(float linewidth, float extraSpace);

    p lic void setBorder(float linewidth, float extraSpace, Color color);

    下面的方法用指定的宽度(如果需要)和颜色画一条水平线,线的长度是指定两边缘间可用面积的的百分比。

    p lic void setHorizontalLine(float linewidth, float percentage)

    p lic void setHorizontalLine(float linewidth, float percentage, Color color)

    示例代码5中,有一个离边界5磅,线宽3磅的边框,还有两条水平线,一条为黑色,5磅宽,可用空间的100%,另外一条为红色,线宽3磅,可用空间的80%。

    第五章 表格

    重点:如果你仅仅生成PDF文件(没有XML、HTML、RTF……),使用类pdfPTable代替类Table更好。

    一些简单的表格

    一个表格是包含单元格排列成矩阵的矩形区域。表格的距阵并不要求是m×n的,它可以有空洞或者单元格比单个的要大。

    创建一个表格最通用的办法是预先知道有几行几列:

    p lic Table(int columns, int rows);

    在示例代码0501中,我们构建了一个简单的表:

    Table aTable = new Table(2,2);

    aTable.addCell("0.0");

    aTable.addCell("0.1");

    aTable.addCell("1.0");

    aTable.addCell("1.1");

    该表格有两行两列,单元格被自动添加,从第一行第一列开始,然后是第二列,当一行满后,下一单元格自动添加到下一行的第一列中。

    也可以将单元格添加到表中指定的位置,如示例代码0502,别了要添加System.Drawing.dll引用,以获得Point对象,我们创建了一个4行4列的表格然后添加一些单元格到随机的位置上:

    Table aTable = new Table(4,4);

    aTable.AutoFillEmptyCells = tr;

    aTable.addCell("2.2", new Point(2,2));

    aTable.addCell("3.3", new Point(3,3));

    aTable.addCell("2.1", new Point(2,1));

    aTable.addCell("1.3", new Point(1,3));

    你可以看到我们将AutoFillEmptyCells属性设置为tr,这将自动、默认的单元格布局填充空的单元格,如果我们忘记了这样做(就象本例中第二个表格),将没有额外的单元格添加,不包含任何单格的行也将被忽略,在本例中,第一行将不显示,因为该行是空行。

    经常用数据库查询结果来填充表格,大多数情况下,你预先并不知道到底需要多少行,这就是为什么还有第二个构造函数的原因:

    p lic Table(int columns);

    iText根据需要自动添加行,在示例代码0503中,初始化了4行4列,当我们添加第6行和第7行的单元格时,iText自动增加行数到7。

    增加列数也是可能的,但是有点麻烦,它不能自动生成,你必须使用addColumns方法并设置列宽,详见示例代码0504。

    一些表格参数

    前面例子中的表格并不美观,我们可以设置大量的参数来改变表格外观。类Table和类Cell派生于类Rectangle,我们可以用大量典型的Rectangle方法,让我们来看看示例代码0505。

    Table table = new Table(3);

    table.BorderWidth = 1;

    table.BorderColor = new Color(0, 0, 255);

    table.Cellpadding = 5

    转载于:https://www.cnblogs.com/renzhendewo/archive/2011/08/25/2153065.html

    展开全文
  • C# 导出Excel或Word

    2019-09-26 01:32:32
    /// <summary> /// 导出Excel /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Button1_Click(object ...

        /// <summary>
        /// 导出Excel
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button1_Click(object sender, EventArgs e)
        {
            Export("application/ms-excel", "Employee information.xls");
        }
        /// <summary>
        /// 定义导出Excel的函数
        /// </summary>
        /// <param name="FileType"></param>
        /// <param name="FileName"></param>
        private void Export(string FileType, string FileName)
        {
            Response.Charset = "GB2312";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
            Response.ContentType = FileType;
            this.EnableViewState = false;
            StringWriter tw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(tw);
            GridView1.RenderControl(hw);
            Response.Write(tw.ToString());
            Response.End();
        }
        /// <summary>
        /// 此方法必重写,否则会出错
        /// </summary>
        /// <param name="control"></param>
        public override void VerifyRenderingInServerForm(Control control)
        {
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            //Export("application/ms-excel", "Employee.doc");
            Export("application/ms-word", "员工信息.doc");//都可以
        }

    //如果没有下面方法会报错类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内
    public override void VerifyRenderingInServerForm(Control control)
    {
    }


    还有由于是文件操作所以要引入名称空间IO和Text
    2.读取Excel:
    private DataSet CreateDataSource()
    {
            string strCon;
            strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("excel.xls") + "; Extended Properties=Excel 8.0;";
            OleDbConnection olecon = new OleDbConnection(strCon);
            OleDbDataAdapter myda = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strCon);
            DataSet myds = new DataSet();
            myda.Fill(myds);
            return myds;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
            GridView1.DataSource = CreateDataSource();
            GridView1.DataBind();
    }

    转载于:https://www.cnblogs.com/Shirly-Zhang/p/5231564.html

    展开全文
  • C# 导出word 和中文乱码

    千次阅读 2014-07-17 09:34:37
    C# 转word 中文名乱码

    <pre name="code" class="csharp"><pre name="code" class="csharp">   protected void btnWord_Click(object sender, EventArgs e)
            {
                string strSql = "SELECT语句filename";
                string filename = this.Sql.GetString(strSql) + DateTime.Now.ToString("yyyyMMdd");
                strSql = "SELECT 主循环";
                DataTable dt = GetDataTable(strSql);
                if (dt.Rows.Count == 0 || dt == null)
                {
                    this.MsgBox("读取数据失败!");
                    return;
                }
    			//这块就像html里面类似
                Response.ContentType = "application/msword";
                Response.ContentEncoding = System.Text.Encoding.UTF8;
                Response.AppendHeader("Content-Disposition", "attachment;filename=" + ToHexString(filename) + ".doc");//ToHexString(filename)防止中文乱码
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    strSql = "SELECT 子循环";
                    DataTable dtview = this.Sql.GetDataTable(strSql);
                    if (dtview.Rows.Count > 0)
                    {
                        sb.Append("<table><tr><td colspan='3' width='1000' align='center'>Tilte公司</td><tr>");
                        sb.Append("<tr><td colspan='3' width='1000'  align='center'>Title标题</td></tr>");
                        sb.AppendFormat("<tr><td width='300' align='left'>作业:{0}</td><td  width='400' align='center'>单位:{1}</td><td  width='300' align='right'>编号:{2}</td></tr>", dt.Rows[i]["列名"].ToString(), dt.Rows[i]["列名"].ToString(), dt.Rows[i]["列名"].ToString());
                        sb.AppendFormat("<tr><td align='left'>日 期:{0}</td><td></td><td align='right'>期间:{1}</td></tr></table>", DateTime.Parse(dtview.Rows[0]["列名"].ToString()).ToString("yyyy-MM-dd"), dt.Rows[i]["列名"].ToString());
                        sb.Append("<table  border='1'><tr><th rowspan='2' width='420'>重  点</th><th colspan='3' width='160'>标 准</th><th rowspan='2' width='420'>结果<th></tr><tr><th>是</th><th>否</th><th>不适用</th></tr>");
                        for (int j = 0; j < dtview.Rows.Count; j++)
                        { 
                            sb.AppendFormat("<tr><td width='420'>{0}</td>", (j + 1).ToString() + "." + dtview.Rows[j]["列名"].ToString());
                            switch (int.Parse(dtview.Rows[j]["lngrule"].ToString()))
                            {
                                case 1:
                                    sb.AppendFormat("<td>{0}</td><td></td><td></td>", "√");
                                    break;
                                case 2:
                                    sb.AppendFormat("<td></td><td>{0}</td><td></td>", "√");
                                    break;
                                case 3:
                                    sb.AppendFormat("<td></td><td></td><td>{0}</td>", "√");
                                    break;
                            }
                            sb.AppendFormat("<td width='420'>{0}</td>", dtview.Rows[j]["列名"].ToString());
                            sb.Append("</tr>");
                        }
                        sb.Append("</table>");
                        sb.Append("<table><tr><td colspan='5' height='25'></td><td colspan='5'></td><td colspan='5' height='25'></td></tr></table>");
                    }
                }
                Response.Write(sb.ToString());
                Response.End();
            }
    		
    		
    		#region 保存word中文名称乱码
            /// <summary>  
            /// 为字符串中的非英文字符编码  
            /// </summary>  
            /// <param name="s"></param>  
            /// <returns></returns>  
            public string ToHexString(string s)
            {
                char[] chars = s.ToCharArray();
                StringBuilder builder = new StringBuilder();
                for (int index = 0; index < chars.Length; index++)
                {
                    bool needToEncode = NeedToEncode(chars[index]);
                    if (needToEncode)
                    {
                        string encodedString = ToHexString(chars[index]);
                        builder.Append(encodedString);
                    }
                    else
                    {
                        builder.Append(chars[index]);
                    }
                }
                return builder.ToString();
            }
    
            /// <summary>  
            ///指定 一个字符是否应该被编码  
            /// </summary>  
            /// <param name="chr"></param>  
            /// <returns></returns>  
            private bool NeedToEncode(char chr)
            {
                string reservedChars = "$-_.+!*'(),@=&";
                if (chr > 127)
                    return true;
                if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0)
                    return false;
                return true;
            }
    
            /// <summary>  
            /// 为非英文字符串编码  
            /// </summary>  
            /// <param name="chr"></param>  
            /// <returns></returns>  
            private string ToHexString(char chr)
            {
                UTF8Encoding utf8 = new UTF8Encoding();
                byte[] encodedBytes = utf8.GetBytes(chr.ToString());
                StringBuilder builder = new StringBuilder();
                for (int index = 0; index < encodedBytes.Length; index++)
                {
                    builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16));
                }
                return builder.ToString();
            }
            #endregion


     
    
     
    

    展开全文
  • C#生成World文档

    2016-05-16 15:18:05
    using  System; using  System.Collections.Generic; ... WordApp.Selection.ParagraphFormat.Alignment = Microsoft.... message = "文件导出异常!";  }   return  message;  }  } }
    
    using
     System;
    using  System.Collections.Generic;
    using  System.ComponentModel;
    using  System.Data;
    using  System.Drawing;
    using  System.Text;
    using  System.Windows.Forms;
    using  System.IO;
    using  Microsoft.Office.Interop.Word;
    namespace  WindowsApplication4
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }


            private void button1_Click(object sender, EventArgs e)
            {
                CreateWordFile("c:\\dd.doc");
            }

            public string CreateWordFile(string CheckedInfo)
           {
                string message = "";
                try
                {
                    Object Nothing = System.Reflection.Missing.Value;
                    Directory.CreateDirectory("C:/CNSI");  //创建文件所在目录
                    string name = "CNSI_" + DateTime.Now.ToLongDateString()+".doc";
                    object filename = "C://CNSI//" + name;  //文件保存路径
                    
    //创建Word文档
                    Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
                    Microsoft.Office.Interop.Word.Document WordDoc = WordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);

                    //添加页眉
                    WordApp.ActiveWindow.View.Type = WdViewType.wdOutlineView;
                    WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekPrimaryHeader;
                    WordApp.ActiveWindow.ActivePane.Selection.InsertAfter("[页眉内容]");
                    WordApp.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;//设置右对齐
                    WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekMainDocument;//跳出页眉设置

                    WordApp.Selection.ParagraphFormat.LineSpacing = 15f;//设置文档的行间距

                    
    //移动焦点并换行
                    object count = 14;
                    object WdLine = Microsoft.Office.Interop.Word.WdUnits.wdLine;//换一行;
                     WordApp.Selection.MoveDown(ref WdLine, ref count, ref Nothing);//移动焦点
                     WordApp.Selection.TypeParagraph();//插入段落

                     
    //文档中创建表格
                     Microsoft.Office.Interop.Word.Table newTable = WordDoc.Tables.Add(WordApp.Selection.Range, 12, 3, ref Nothing, ref Nothing);
                     //设置表格样式
                     newTable.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleThickThinLargeGap;
                     newTable.Borders.InsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;
                     newTable.Columns[1].Width = 100f;
                     newTable.Columns[2].Width = 220f;
                     newTable.Columns[3].Width = 105f;

                     //填充表格内容
                     newTable.Cell(1, 1).Range.Text = "产品详细信息表";
                     newTable.Cell(1, 1).Range.Bold = 2;//设置单元格中字体为粗体
                     
    //合并单元格
                     newTable.Cell(1, 1).Merge(newTable.Cell(1, 3));
                     WordApp.Selection.Cells.VerticalAlignment = Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;//垂直居中
                     WordApp.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;//水平居中
                            
                     
    //填充表格内容
                     newTable.Cell(2, 1).Range.Text = "产品基本信息";
                     newTable.Cell(2, 1).Range.Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorDarkBlue;//设置单元格内字体颜色
                     
    //合并单元格
                     newTable.Cell(2, 1).Merge(newTable.Cell(2, 3));
                     WordApp.Selection.Cells.VerticalAlignment = Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;

                      //填充表格内容
                      newTable.Cell(3, 1).Range.Text = "品牌名称:";
                      newTable.Cell(3, 2).Range.Text = "BrandName";
                      //纵向合并单元格
                      newTable.Cell(3, 3).Select();//选中一行
                      object moveUnit = Microsoft.Office.Interop.Word.WdUnits.wdLine;
                      object moveCount = 5;
                      object moveExtend = Microsoft.Office.Interop.Word.WdMovementType.wdExtend;
                       WordApp.Selection.MoveDown(ref moveUnit, ref moveCount, ref moveExtend);
                       WordApp.Selection.Cells.Merge();
                       //插入图片
                       string FileName = @"c:\picture.jpg";//图片所在路径
                       object LinkToFile = false;
                       object SaveWithDocument = true;
                       object Anchor = WordDoc.Application.Selection.Range;
                       WordDoc.Application.ActiveDocument.InlineShapes.AddPicture(FileName, ref LinkToFile, ref SaveWithDocument, ref Anchor);
                        WordDoc.Application.ActiveDocument.InlineShapes[1].Width = 100f;//图片宽度
                        WordDoc.Application.ActiveDocument.InlineShapes[1].Height = 100f;//图片高度
                        
    //将图片设置为四周环绕型
                        Microsoft.Office.Interop.Word.Shape s = WordDoc.Application.ActiveDocument.InlineShapes[1].ConvertToShape();
                        s.WrapFormat.Type = Microsoft.Office.Interop.Word.WdWrapType.wdWrapSquare;
                            
                        newTable.Cell(12, 1).Range.Text = "产品特殊属性";
                        newTable.Cell(12, 1).Merge(newTable.Cell(12, 3));
                         //在表格中增加行
                         WordDoc.Content.Tables[1].Rows.Add(ref Nothing);
                          
                         WordDoc.Paragraphs.Last.Range.Text = "文档创建时间:" + DateTime.Now.ToString();//“落款”
                         WordDoc.Paragraphs.Last.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;

                        //文件保存
                        WordDoc.SaveAs(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
                        WordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
                        WordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
                        message=name+"文档生成成功,以保存到C:CNSI下";
                }

                catch
               {
                    message = "文件导出异常!";
                }

                return message;
            }

        }

    }
    展开全文
  • c#导出C++回调函数(cici)

    千次阅读 2012-08-09 16:18:10
    c#导出C++回调函数(cici) 最近在公司做一个新的项目,由于C#做界面是非常快速的,于是决定用C#重写C++的界面,而原来的C++动态链接库是不需要修改的。只需要调用一下就可以了。 在调用过程中发现C++有回调函数...
  • C#导出pdf文件《一》

    千次阅读 2012-06-20 16:45:16
    2、 单击菜单“文件”→“新建”→“项目”,在项目类型中选择“Visual C#项目”,在模板中选择“控制台应用程序”,输入文件名称如“MakePdf”,指定好存放路径,然后点确定按钮; 3、 在“解决方案资源管理器...
  • C#导出PDF文件《二》

    千次阅读 2012-06-20 17:10:35
    5. table.Cellspacing = 5; 我们设置了表格的间距,就是单元格和表格边界间的一定数量的空间,不同的单元格间使用了半数空间,具体代码见示例代码0506 Cell cell = new Cell("header"); cell.Header = true;...
  • C# 导出 PDF(转载)

    2011-04-21 16:58:00
    2、 单击菜单“文件”→“新建”→“项目”,在项目类型中选择“Vis l C#项目”,在模板中选择“控制台应用程序”,输入文件名称如“MakePdf”,指定好存放路径,然后点确定按钮; 3、 在“解决方案资源管理器”中...
  • C# DevExpress GridControl导出表格

    千次阅读 2017-04-17 16:08:58
    DevExpress的GridControl提供方便的数据导出功能,可以方便的导出Exce,PDF,Html页面,world形式,无需写额外的代码,方便、快捷。/// /// 导出表格 /// /// <param name="gridControl1"></param> public
  • .net core 3.1框架引用NPOI动态导出World文档,包含分页、单元格合并基本功能1.引用第三方库NPOI动态生成表格生成wrold文本样式测试掉用生成效果参考文章 1.引用第三方库NPOI ![在这里插入图片描述] 动态生成表格 ...
  • C#.NET MVC 导出WORD文档

    千次阅读 2017-10-17 09:38:31
    使用C#.NET 的MVC模式将记录导出为Word
  • C#NPOI导出至Word

    2021-01-04 11:37:19
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 C#导出至WORD 前言 一、操作步骤 1.写段落以及段落格式的封装 2.创建表格及表格设置 3.创建并加入行 总结 前言 NPOI可以导出至Excel,那当然也...
  • C#导出WORD

    2019-10-06 12:15:28
    一、操作Word   首先引用这个DLL,Microsoft.Office.Interop.Word,官方提供的。... document.Paragraphs[i].Range.Text = temptext.Replace("{$village}", "HELLO WORLD");  表格可以自己...
  • C# MVC根据Word模板导出Word

    热门讨论 2015-08-11 13:20:24
    C#MVC开发的根据word模板导出word的功能,分为三部分。功能很完善,我也是下载回来的,下载回来不能用,我又改过了,保证可用的。环境是VS2013,MVC4.保存下来,分享给各位。
  • C# 快速导出word

    千次阅读 2013-03-05 11:16:41
    StreamWriter writer = new StreamWriter("D:\a.doc”, false, Encoding.GetEncoding("gb2312")); StringBuilder builder = new StringBuilder(); builder.Append("");
  • C#MVC开发的根据word模板导出word的功能,分为三部分。功能很完善,我也是下载回来的,下载回来不能用,我又改过了,保证可用的。环境是VS2013,MVC4.保存下来,分享给各位。
  • The tiled mesh allows you to create systems where you stream new navigation data in and out as the player progresses the level, or you may regenerate tiles as the world changes. Recast Demo You can ...
  • 导出效果如下图: 还是先分享下学习链接:http://www.cnblogs.com/wuhuacong/archive/2013/02/05/2893191.html 如上图,采用简单的书签进行替换,即可把书签值替换成想要的值,关键代码如下:   string ...
  • c#下如何导出excel

    2012-05-30 21:29:11
    C#读写EXCEL方法一 using System; using System.Collections.Generic; using System.Drawing; using System.Reflection; using System.IO; namespace ExcelTest {  class Program  {  static
  • C# world模板中写信息

    2019-09-30 10:48:14
    看到有博客园朋友需要往world中写内容相关代码,我就简单写一下。其实往world中写内容分两种情况:纯文本内容、二进制内容(图片),难点在厚着。主要用到ApplicationClass 、Document操作类, 以下是我上网查询和...
  • 找了好久终于找到了完美的导出word程序,和大家分享一下 通过模板,然后可以插入表格,插入文字,图片等。可以自定义格式
  • DevExpress的GridControl提供方便的数据导出功能,可以方便的导出Exce,PDF,Html页面,world形式,无需写额外的代码,方便、快捷。 /// &lt;summary&gt; /// 导出表格 /// &lt;/summary&gt; /...
  • 最近项目中有数据的导入导出Excel的需求,这里做简单整理。 公司用的是Infragistics的产品,付费,不需要本地安装Office。 有需要的朋友可以下载Infragistics.2013.2.2098,提取密码:5u17 本文完整代码下载Demo....
  • C#导出数据到EXCEL的简单例子

    千次阅读 2007-08-04 17:06:00
    这几天没事在网上闲逛的时候看到类似的代码,花了点时间测试了一下。觉得不错。简单的整理一下。 在项目中需要引用:COM:Microsoft Office 11.0 Object Library  COM:Microsoft Excel 11.0 Object Library简单...
  • 一、操作Word   首先引用这个DLL,Microsoft.Office.Interop.Word,官方提供的。... document.Paragraphs[i].Range.Text = temptext.Replace("{$village}", "HELLO WORLD");  表格可以自己...
  • 我想用C#做个简历导出的类似功能,但是导出word格式时存在问题,请大神指教,最好有完整前后台代码 最好简单点
  • 最近在公司做一个新的项目,由于C#做界面是非常快速的,于是决定用C#重写C++的界面,而原来的C++动态链接库是不需要修改的。只需要调用一下就可以了。 在调用过程中发现C++有回调函数,于是翻开MSDN终于发现,回调...
  • c#项目中用Docx插件导出word文档

    千次阅读 2018-04-26 19:28:59
    在项目中遇到一个问题,就是当有多个用户同时下载一个文档时,会出现下载不了的情况,经调研,可能是微软自带的Microsoft.Office.Interop.Word插件的问题,所以就改用Docx插件,解决了问题。代码如下: public void...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,399
精华内容 1,759
热门标签
关键字:

c#导出world

c# 订阅