- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
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(
@"路径"
);
}
|
保存我们看一下 。
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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我的代码有一些问题。我正在尝试遍历包含许多 PDF 的 Drive 文件夹,然后将它们合并为一个文件。当我使用我的代码时,它只是为 Drive 文件夹中的最后一个 PDF 创建一个 PDF,而不是按预
我从 PDF Specification 获取了 PDF 规范中的最小 PDF 示例。 ,将其复制到记事本,将文件重命名为扩展名为 .pdf。 我可以用其他 PDF 查看器(PDF-XChange、S
感谢您在以下方面的帮助: 我有 2 个部分可访问的 PDF(包含标签),我想使用一些命令行工具(如 PDFtk 或 Ghostscript,或任何 Perl 模块)将它们连接起来: 我已经尝试使用 P
我想使用 ghostscript 将矢量 pdf 转换为光栅 pdf(即光栅化矢量 pdf)。但是即使我添加了解析参数 -r300,我也找不到合适的参数来执行此操作。 我使用的代码是-dSAFER -
我无法在 FAQ 中找到这个功能是否存在于 API 中,尽管它在书中提到作为潜在可用的东西。有没有人有任何实现此功能的经验? 最佳答案 在 This thread (日期为 2007 年 6 月)Pa
我要放文件sample.pdf在我的网站上,并希望使用 pdf.js 显示它.我想要的是显示我自己的文件,如 demo ,带有工具栏,放大/缩小等。到目前为止,我还不能这样做。 我确实检查了 hell
我知道这可能不是严格意义上的编程问题(也许是,我不知道)但我在尝试转换常规 pdf(带有超链接、书签、图像、嵌入字体等)时遇到了严重问题.) 转换为 PDF/A-1 格式。 当我用 pdfaPilot
这是 PDF.js 网站 https://github.com/mozilla/pdf.js 我正在搜索和阅读很多文章,大多数编码都是将 pdf 导入 pdf.js 并在浏览器上显示,我不明白是不是
谁能建议我如何将扫描图像转换为可搜索图像或如何将扫描 pdf 转换为可搜索 pdf? 很长一段时间以来,我一直陷入这种情况。 我已经在 ubuntu 中尝试过 pdfocr 应用程序,但没有成功。 最
作为我对客户端/服务器 pdf 签名研究的一部分,我测试了 itext pdf 延迟签名示例。不幸的是,我生成的 pdf 即合并空签名 pdf 和哈希值的输出显示无效签名。 我的代码片段如下 cla
我想将一个 PDF 页面插入到另一个已缩放的 PDF 页面中。我想使用 iTextSharp 来实现此目的。 我有一个矢量绘图,可以导出为单页 PDF 文件。我想将此文件添加到其他 PDF 文档的页面
作为我对客户端/服务器 pdf 签名研究的一部分,我测试了 itext pdf 延迟签名示例。不幸的是,我生成的 pdf 即合并空签名 pdf 和哈希值的输出显示无效签名。 我的代码片段如下 cla
我想为 Kindle 转换电子书。我尝试使用 Calibre 将具有复杂格式样式和图像的基于两种语言的基于文本的大型 PDF 电子书转换为适用于 Kindle 的 AZW3 电子书,并且还尝试了亚马逊
我在 Google Chrome 中显示 pdf 时遇到问题。问题是 Chrome 将 pdf 的某些页面显示为黑色。 启用 Chrome PDF 查看器时会发生这种情况。如果我禁用此插件并使用 Ad
我确信这个问题无处不在,尽管我似乎找不到答案。我希望我的 PDF 文档在 PDF 阅读器中显示时没有空白页,但随后在封面后打印空白页,这样打印出来的文档在右侧甚至左侧都有奇数页。还有其他人遇到过这个问
我需要自动裁剪 pdf 文件(去除白边)。到目前为止,我尝试了两种并不完美的工具: pdf裁剪 问题:它不会裁剪某些 pdf。 pdf-crop-margins 问题:有时它裁剪得太多(精细的细节)。
This PDF由几个源文件组成。其中五个是包含 alpha channel 的 PNG。一种是没有 alpha channel 的 PNG。最后一 block 是带有透明效果的 Photoshop
我的团队将内部 wiki 页面用于各种内容。这些页面是使用 MediaWiki 创建的。我想知道是否有任何方法可以将 wiki 页面转换为 PDF 格式。我必须用它来将用户文档转换为 PDF 格式,以
我希望能够从我可能在数据库或 xml 或任何其他结构化形式中拥有的数据生成高度图形化(也包含大量文本内容)的 PDF 文件。 目前,我们的平面设计师在将内容作为 MS Word 文档后,在 Photo
我正在寻找可以帮助我找到重复 PDF 的实用程序。问题:我有 1000 个 PDF 文件。有些是重复的。由于不同的文件名和文件大小的微小差异,它们不容易被检测到。是否有实用程序/算法/库可以帮助我找到
我是一名优秀的程序员,十分优秀!