使用PDFSharp将文本转换为PDF

4

我想使用PDFsharp将文本文件转换为PDF。应该采取什么方法?这是否可能?我正在使用C#.net开发Web应用程序。

3个回答

6

我们的做法是检查PDFsharp和MigraDoc的示例,然后决定使用哪个工具。

如果文本可能需要超过一页,我会猜测MigraDoc将是更好的选择。

另请参见:
http://pdfsharp.net/wiki/MigraDocSamples.ashx


5
我为此目的写了一段代码。
最初,我使用了pdfsharp dll来实现,但是这并不能满足我的需求,因为pdfsharp无法感知页面的换行。当我编写代码时,我发现只有那些适合在第一页打印的内容被输出了。
然后我了解到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文件的完整路径调用此方法进行创建。

这样就可以实现了。


0

如果您想要混合使用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);
            }
        }
    }
}
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接