gpt4 book ai didi

.Net 对于PDF生成以及各种转换的操作

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章.Net 对于PDF生成以及各种转换的操作由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前段时间公司的产品,要做一个新功能,签章(就是把需要的数据整理成pdf很标准的文件,然后在盖上我们在服务器上面的章) 。

然后我就在百度上找了找,发现搞pdf的类库很少,要么就要钱,要么就有水印,破解版的没找到.

先讲一讲我是怎么生成pdf的 。

1、生成pdf 。

  这里用到了spire.pdf 这个类库可以在nuget里面搜索到,上面带个小红标的就是免费版本。   。

  当然也可以去他们的官网,上面还有文档(https://www.e-iceblue.cn/introduce/spire-pdf-net.html).

  代码(这是我自己写的一个测试的表格) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
public static void abc()
  {
   //创建pdf文档
   spire.pdf.pdfdocument doc = new spire.pdf.pdfdocument();
 
   //添加一页
   pdfpagebase page = doc.pages.add();
    //设置字体
   pdftruetypefont font = new pdftruetypefont( new system.drawing.font( "microsoft yahei" , 20f), true );
   pdftruetypefont font1 = new pdftruetypefont( new system.drawing.font( "microsoft yahei" , 11f), true );
 
   //创建一个pdfgrid对象
   pdfgrid grid = new pdfgrid();
 
        //这一段的内容是在表格只玩显示一些数据 根据坐标定位 第一个是内容,第二个是字体,第三个是颜色,第四第五是坐标
   page.canvas.drawstring( "xxxxxxxx管理中心回单" ,
     font,
     new pdfsolidbrush(system.drawing.color.black), 130, 10);
   page.canvas.drawstring( "编号:31231" ,
     font1,
     new pdfsolidbrush(system.drawing.color.black), 380, 60);
   page.canvas.drawstring( "经办人:xxxx" ,
     font1,
     new pdfsolidbrush(system.drawing.color.black), 60, 250);
   page.canvas.drawstring( "打印日期:2020/06/15" ,
     font1,
     new pdfsolidbrush(system.drawing.color.black), 380, 250);
   //设置单元格边距
   grid.style.cellpadding = new pdfpaddings(1, 1, 4, 4);
 
   //设置表格默认字体
   grid.style.font = new pdftruetypefont( new system.drawing.font( "microsoft yahei" , 12f), true );
 
   //添加4行4列
   pdfgridrow row1 = grid.rows.add();
   pdfgridrow row2 = grid.rows.add();
   pdfgridrow row3 = grid.rows.add();
   pdfgridrow row4 = grid.rows.add();
   pdfgridrow row5 = grid.rows.add();
   pdfgridrow row6 = grid.rows.add();
   grid.columns.add(4);
 
   //设置列宽
   foreach (pdfgridcolumn col in grid.columns)
   {
    col.width = 120f;
   }
 
   //写入数据 第一行第一个格式的值,第一行第二个格子的值
   row1.cells[0].value = "收款单位" ;
   row1.cells[1].value = "{dw}" ;
   row2.cells[0].value = "收款单位" ;
   row2.cells[1].value = "{dw}" ;
   row3.cells[0].value = "汇款时间" ;
   row3.cells[1].value = "2016/06/02" ;
   row3.cells[2].value = "金额小写" ;
   row3.cells[3].value = "¥231" ;
   row4.cells[0].value = "金额合计大写" ;
   row4.cells[1].value = "大苏打实打实" ;
   row5.cells[0].value = "用途:" +
    "付xxxx2020年04月至2020年04月" ;
   row6.cells[0].value = "提示:回单可重复打印,请勿重复xxx" ;
 
   //row5.cells[0].height = (float)20;
   //水平和垂直合并单元格 从那个格子开始合并几个(包含当前格子)
   row1.cells[1].columnspan = 3;
   row2.cells[1].columnspan = 3;
   row4.cells[1].columnspan = 3;
   row5.cells[0].columnspan = 2;
   row5.cells[2].columnspan = 2;
   row6.cells[0].columnspan = 2;
   row6.cells[2].columnspan = 2;
        //这个是垂直合并,但是我之前合并的没有效果
   row5.cells[1].rowspan = 2;
 
   //设置单元格内文字对齐方式
   row1.cells[0].stringformat = new pdfstringformat(pdftextalignment.center);
   row1.cells[1].stringformat = new pdfstringformat(pdftextalignment.center);
   row2.cells[0].stringformat = new pdfstringformat(pdftextalignment.center);
   row2.cells[1].stringformat = new pdfstringformat(pdftextalignment.center);
   row3.cells[0].stringformat = new pdfstringformat(pdftextalignment.center);
   row3.cells[1].stringformat = new pdfstringformat(pdftextalignment.center);
   row3.cells[2].stringformat = new pdfstringformat(pdftextalignment.center);
   row3.cells[3].stringformat = new pdfstringformat(pdftextalignment.center);
   row4.cells[0].stringformat = new pdfstringformat(pdftextalignment.center);
   row4.cells[1].stringformat = new pdfstringformat(pdftextalignment.center);
   row5.cells[0].stringformat = new pdfstringformat(pdftextalignment.center);
   row6.cells[0].stringformat = new pdfstringformat(pdftextalignment.center);
   //设置单元格背景颜色
   //row1.cells[0].style.backgroundbrush = pdfbrushes.gray;
   //row3.cells[3].style.backgroundbrush = pdfbrushes.green;
   //row4.cells[3].style.backgroundbrush = pdfbrushes.mediumvioletred;
 
   //设置边框颜色、粗细
   pdfborders borders = new pdfborders();
   borders.all = new pdfpen(system.drawing.color.black, 0.1f);
   foreach (pdfgridrow pgr in grid.rows)
   {
    foreach (pdfgridcell pgc in pgr.cells)
    {
     pgc.style.borders = borders;
    }
   }
   //保存到文档
   //在指定为绘入表格
   grid.draw(page, new pointf(30, 80));
   doc.savetofile( @"路径" );
       //这句是在浏览器重打开这个pdf  
   system.diagnostics.process.start( @"路径" );
  }

  保存我们看一下 。

  .Net 对于PDF生成以及各种转换的操作

2、之后就是关于pdf一些转换的操作了(pdf转base64,转图片之类的,我把代码贴到下面) 。

这个用到了itextsharp类库,也可以在nuget下载到 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/// <summary>
   /// 图片转pdf
   /// </summary>
   /// <param name="jpgfile"></param>
   /// <param name="pdf"></param>
   public static bool convertjpg2pdf( string jpgfile, string pdf)
   {
    try
    {
     var document = new itextsharp.text.document(itextsharp.text.pagesize.a4, 25, 25, 25, 25);
     using (var stream = new filestream(pdf, filemode.create, fileaccess.write, fileshare.none))
     {
      pdfwriter.getinstance(document, stream);
      document.open();
      using (var imagestream = new filestream(jpgfile, filemode.open, fileaccess.read, fileshare.readwrite))
      {
       var image = itextsharp.text.image.getinstance(imagestream);
       if (image.height > itextsharp.text.pagesize.a4.height - 25)
       {
        image.scaletofit(itextsharp.text.pagesize.a4.width - 25, itextsharp.text.pagesize.a4.height - 25);
       }
       else if (image.width > itextsharp.text.pagesize.a4.width - 25)
       {
        image.scaletofit(itextsharp.text.pagesize.a4.width - 25, itextsharp.text.pagesize.a4.height - 25);
       }
       image.alignment = itextsharp.text.image.align_middle;
       document.newpage();
       document.add(image);
      }
      document.close();
     }
 
     return true ;
 
    }
    catch (exception ex)
    {
     throw ex;
    }
   }

这个和上面用的也是同一个(我觉得这个比较好用一些) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/// <summary>
   /// pdf转img
   /// </summary>
   /// <param name="path">pdf位置</param>
   /// <param name="path2">img位置</param>
   public static void pdf2img( string path, string path2)
   {
    pdffile pdffile = pdffile.open(path);
    //实例化一个pdfdocument类对象,并加载pdf文档
    using (spire.pdf.pdfdocument doc = new spire.pdf.pdfdocument())
    {
     doc.loadfromfile(path);
     //调用方法saveasimage()将pdf第一页保存为bmp格式
     system.drawing.image bmp = doc.saveasimage(0);
     // //调用另一个saveasimage()方法,并将指定页面保存保存为emf、png  
     system.drawing.image emf = doc.saveasimage(0, spire.pdf.graphics.pdfimagetype.bitmap);
     system.drawing.image zoomimg = new bitmap(( int )(emf.size.width * 2), ( int )(emf.size.height * 2));
     using (graphics g = graphics.fromimage(zoomimg))
     {
      g.scaletransform(2.0f, 2.0f);
      g.drawimage(emf, new system.drawing.rectangle( new system.drawing.point(0, 0), emf.size), new system.drawing.rectangle( new system.drawing.point(0, 0), emf.size), graphicsunit.pixel);
      zoomimg.save(path2, imageformat.jpeg);
     
      zoomimg.dispose();
      emf.dispose();
      bmp.dispose();
     }
     doc.close();
     doc.dispose();
   
   }

我主要也就用到这些,之后在发现,我在往上加   。

  这个是o2s.components.pdfrender4net的文件,我看评论里有问的,之前忘记发了,网上有的是收费的,nuget里面带后缀的我没用过.

到此这篇关于.net 对于pdf生成以及各种转换的操作的文章就介绍到这了,更多相关.net pdf生成内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

本文作者:沉_默 本文链接:https://www.cnblogs.com/silentcm/p/13130333.html 。

最后此篇关于.Net 对于PDF生成以及各种转换的操作的文章就讲到这里了,如果你想了解更多关于.Net 对于PDF生成以及各种转换的操作的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com