绘制长文本
打开CaseStyudy目录下的文件"PDFCreator示例.Table"后运行本节的示例代码。
文本通常绘制在指定的矩形区域,如果文本很长,需要跨越多个页面,此时一个矩形区域无法容纳全部文本,那么该怎么绘制呢?
这就需要使用DrawString方法的新语法:
DrawString(text, font, brush,
rect, firstChar)
DrawString(text, font, color, rect, firstChar)
DrawString(text, font, brush, rect, sf, firstChar)
DrawString(text, font, color, rect, sf, firstChar)
要点:
1、新增加的firstChar表示是一个整数,用于指定DrawString开始绘制的第一个字符的位置 。
2、 如果无法绘制完所有内容,DrawString方法会返回一个整数值,这个值表示剩余内容的第一个字符的位置, 通常用于下一次调用DrawString的firstChar参数
示例
请打开CaseStyudy目录下的文件"PDFCreator示例.Table",然后在命令窗口运行下面的代码,这个代码将一个文本文件转成PDF格式:
Dim
file
As
String
=
"c:\temp\test.pdf"
Dim
pdc
As
New
PDFCreator()
Dim
fnt
As
New
Font("Arial",
18)
Dim
txt
As
String
= FileSys.ReadAllText(ProjectPath &
"flow.txt")
'内容来自于一个文本文件
Dim
nextChar
As
Integer
'定义一个变量,用于记录开始绘制字符的位置,默认为0
,也就是从第一个字符开始绘制
Dim
rect
As
RectangleF = pdc.PageRectangle()
rect.Inflate( - 72, - 72)
'设置页边距为72磅,也就是1英寸,2.54厘米
pdc.Pages.Clear()
'默认已经有一个页面,先清除掉
While
nextChar < txt.Length
'如果还有剩余字符没有绘制
pdc.NewPage()
'新增一页
nextChar = pdc.DrawString(txt, fnt, Brushes.Black, rect, nextChar)
'注意DrawString返回
值为未绘制内容的起始位置
End
While
pdc.Save(file)
Process.Start(file)
生成的PDF文档如下:
删除页首空行
跨页绘制的时候,如果换页位置恰好是换行符,那么下一页的页首会产生一个不必要的空行;此外如果原本页首位置有一些空行用于区隔内容,那么换页之后,这些空行已经没有意义,还有什么比换页更能区隔内容呢?
如果需要删除页首空行,可以将代码改为:
Dim
file
As
String
=
"c:\temp\test.pdf"
Dim
pdc
As
New
PDFCreator()
Dim
fnt
As
New
Font("Arial",
18)
Dim
txt
As
String
= FileSys.ReadAllText(ProjectPath &
"flow.txt")
'内容来自于一个文本文件
Dim
nextChar
As
Integer
'定义一个变量,用于记录开始绘制字符的位置,默认为0
,也就是从第一个字符开始绘制
Dim
rect
As
RectangleF = pdc.PageRectangle()
rect.Inflate( - 72, - 72)
'设置页边距为72磅,也就是1英寸,2.54厘米
pdc.Pages.Clear()
'默认已经有一个页面,先清除掉
While
nextChar < txt.Length
'如果还有剩余内容没有绘制
pdc.NewPage()
'新增一页
nextChar = pdc.DrawString(txt, fnt, Brushes.Black, rect, nextChar)
'注意DrawString
返回值为未绘制内容的起始位置
If
nextChar < txt.Length
Then
'如果还有剩余字符没有绘制
Dim
content
As
String
= txt.Substring(nextChar)
nextChar = nextChar + (content.Length - content.TrimStart(vbcr,
vblf).Length)
'删除剩余内容开始位置的回车符和换行符
End
If
End
While
pdc.Save(file)
Process.Start(file)
执行后,可以看到第三页页首的空行被删除了: