我想使用PDFsharp将文本文件转换为PDF。应该采取什么方法?这是否可能?我正在使用C#.net开发Web应用程序。
我想使用PDFsharp将文本文件转换为PDF。应该采取什么方法?这是否可能?我正在使用C#.net开发Web应用程序。
我们的做法是检查PDFsharp和MigraDoc的示例,然后决定使用哪个工具。
如果文本可能需要超过一页,我会猜测MigraDoc将是更好的选择。
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
using System.IO;
void CreatePDFFileFromTxtFile(string textfilefullpath, string pdfsavefullpath)
{
//first read text to end add to a string list.
List<string> textFileLines = new List<string>();
using (StreamReader sr = new StreamReader(textfilefullpath))
{
while (!sr.EndOfStream)
{
textFileLines.Add(sr.ReadLine());
}
}
Document doc = new Document();
Section section = doc.AddSection();
//just font arrangements as you wish
MigraDoc.DocumentObjectModel.Font font = new Font("Times New Roman", 15);
font.Bold = true;
//add each line to pdf
foreach (string line in textFileLines)
{
Paragraph paragraph = section.AddParagraph();
paragraph.AddFormattedText(line,font);
}
//save pdf document
PdfDocumentRenderer renderer = new PdfDocumentRenderer();
renderer.Document = doc;
renderer.RenderDocument();
renderer.Save(pdfsavefullpath);
}
使用输入文本的完整路径和输出PDF文件的完整路径调用此方法进行创建。
这样就可以实现了。
如果您想要混合使用PDFsharp和MigraDoc,我的解决方案要求我提取文本并重新打开一个新的流。如果您有本地路径保存选项,则可能不是最佳解决方案,但如果像我一样创建API,则流可能是最佳选项,并且这对我有用。请注意,我正在将其添加到正在进行PDF合并文档过程中的现有PDFsharp PdfDocument中。
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
using PdfSharp;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
...
var txt = new List<string>();
using (var reader = new StreamReader(attachStream))
{
// read txt
while (!reader.EndOfStream)
{
txt.Add(await reader.ReadLineAsync());
}
}
// prep doc
var doc = new Document();
var sec = doc.AddSection();
var font = new Font("Calibri", 12);
foreach (var line in txt)
{
var par = sec.AddParagraph();
par.AddFormattedText(line, font);
}
// render
using (var renderDoc = new PdfDocument())
{
var render = new PdfDocumentRenderer
{
Document = doc,
PdfDocument = renderDoc
};
render.RenderDocument();
// append
using (Stream appendStream = new MemoryStream())
{
renderDoc.Save(appendStream);
using (var inputDoc = PdfReader.Open(appendStream,
PdfDocumentOpenMode.Import))
{
foreach (var page in inputDoc.Pages)
{
outputDoc.Pages.Add(page);
}
}
}
}
...