itextsharp - 如何添加段落然后添加一行?

标签 itextsharp

到目前为止,我看到的所有使用 ITextSharp 的示例都从头开始创建一个新文档,向其中添加一些内容并关闭它。
如果我需要对 PDF 执行多项操作,例如我想添加一个段落然后添加一行,该怎么办。
例如,如果我运行这个简单的控制台应用程序,我只是在其中创建一个 PDF 并添加一个段落,然后关闭它,一切运行正常。

class Program
{
    static void Main(string[] args)
    {
        Document pdfDoc = new Document();
        PdfWriter.GetInstance(pdfDoc, new FileStream("TestPDF.pdf", FileMode.Create));
        pdfDoc.Open();

        pdfDoc.Add(new Paragraph("Some Text added"));

        pdfDoc.Close();

        Console.WriteLine("The file was created.");
        Console.ReadLine();
    }
}

但是,如果我需要做其他事情,例如像这样画一条线
class Program
{
    static void Main(string[] args)
    {
        Document pdfDoc = new Document();
        PdfWriter.GetInstance(pdfDoc, new FileStream("TestPDF.pdf", FileMode.Create));
        pdfDoc.Open();

        pdfDoc.Add(new Paragraph("Some Text added"));

        PdfWriter writer = PdfWriter.GetInstance(pdfDoc, new FileStream("TestPDF.pdf", FileMode.OpenOrCreate));
        PdfContentByte cb = writer.DirectContent;
        cb.MoveTo(pdfDoc.PageSize.Width / 2, pdfDoc.PageSize.Height / 2);
        cb.LineTo(pdfDoc.PageSize.Width / 2, pdfDoc.PageSize.Height);
        cb.Stroke();
        writer.Close();

        pdfDoc.Close();

        Console.WriteLine("The file was created.");
        Console.ReadLine();
    }
}

尝试打开文件时出现错误,因为它已被 pdfDoc 打开。
如果我将突出显示的代码放在 pdfDoc.Close() 之后,我会收到一条错误消息“文档未打开”
如何从添加文本切换到添加行?
我是否需要关闭文档,然后使用 PDFReader 重新打开它并在那里修改它,或者我可以一次完成所有操作吗?

最佳答案

您收到错误是因为您在已有 PDFWriter 实例时尝试请求它的第二个实例。第二个 PdfWriter.GetInstance(pdfDoc, new FileStream("TestPDF.pdf", FileMode.OpenOrCreate));不需要。我对您的代码进行了小幅编辑,现在似乎可以使用了

Document pdfDoc = new Document();
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, new FileStream("TestPDF.pdf", FileMode.OpenOrCreate));

pdfDoc.Open();
pdfDoc.Add(new Paragraph("Some Text added"));             
PdfContentByte cb = writer.DirectContent;
cb.MoveTo(pdfDoc.PageSize.Width / 2, pdfDoc.PageSize.Height / 2);
cb.LineTo(pdfDoc.PageSize.Width / 2, pdfDoc.PageSize.Height);
cb.Stroke();

pdfDoc.Close();

Console.WriteLine("The file was created.");
Console.ReadLine();

关于itextsharp - 如何添加段落然后添加一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3366490/

相关文章:

c# - 如何使用 iTextSharp 读取线条注释外观的宽度?

c# - iTextSharp 密码保护的 PDF

c# - 生成 PDF 时无法获取捷克语字符

itextsharp - 如何在 itextsharp 中使用 PdfContentByte 给文本加下划线

pdf - ITextSharp 添加文本。部分文字不显示

itextsharp - 垂直对齐在复合模式下不起作用

asp.net - 如何使用 iTextSharp?

c# - iTextSharp 从现有的 PDF 模板生成 PDF

c# - 从 GridView 中删除列

c# - Itextsharp 为 IElement 设置字体