我想添加在我的应用程序中生成内容的PDF的功能(为简单起见,它将只是文本)。
有没有办法自动计算单个页面中适合的内容量,或者是否有任何内容溢出一页以创建第二个(第三个,第四个等)页面?
我可以轻松地将其用于文本块 - 只需将文本中的多个字符拆分成字符串数组然后依次打印每个页面 - 但是当文本有很多空格和字符返回时,不起作用。
有什么建议吗?
当前代码:
public void Generate(string title, string content, string filename)
{
PdfDocument document = new PdfDocument();
PdfPage page;
document.Info.Title = title;
XFont font = new XFont("Verdana", 10, XFontStyle.Regular);
List<String> splitText = new List<string>();
string textCopy = content;
int ptr = 0;
int maxCharacters = 3000;
while (textCopy.Length > 0)
{
//find a space in the text near the max character limit
int textLength = 0;
if (textCopy.Length > maxCharacters)
{
textLength = maxCharacters;
int spacePtr = textCopy.IndexOf(' ', textLength);
string startString = textCopy.Substring(ptr, spacePtr);
splitText.Add(startString);
int length = textCopy.Length - startString.Length;
textCopy = textCopy.Substring(spacePtr, length);
}
else
{
splitText.Add(textCopy);
textCopy = String.Empty;
}
}
foreach (string str in splitText)
{
page = document.AddPage();
// Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);
XTextFormatter tf = new XTextFormatter(gfx);
XRect rect = new XRect(40, 100, 500, 600);
gfx.DrawRectangle(XBrushes.Transparent, rect);
tf.DrawString(str, font, XBrushes.Black, rect, XStringFormats.TopLeft);
}
document.Save(filename);
}
答案 0 :(得分:1)
您可以与MigraDoc一起下载PDFsharp。 MigraDoc将根据需要自动添加页面,您只需创建一个文档并将文本添加为段落。
请参阅MigraDoc样本页面:
http://pdfsharp.net/wiki/MigraDocSamples.ashx
答案 1 :(得分:1)
MigraDoc是推荐的方式。
如果您想坚持使用PDFsharp,您可以使用XTextFormatter类(PDFsharp附带的源代码)来创建一个也支持分页符的新类(例如,通过返回适合当前页面的字符数并具有调用代码创建一个新页面并使用剩余的文本再次调用格式化程序。)