绘制长文本

打开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)

执行后,可以看到第三页页首的空行被删除了:

 


本页地址:http://www.foxtable.com/webhelp/topics/6061.htm