【问题标题】:Creating columns (like Word) and justify the text in pdf document using iTextSharp c#使用 iTextSharp c# 创建列(如 Word)并对齐 pdf 文档中的文本
【发布时间】:2017-11-29 14:09:56
【问题描述】:

我正在从事一个执行收银机功能的“研究”项目。它具有基础知识,添加带有名称和价格的产品,可以向客户收费。我创建了一个方法,它获取所有创建的产品(加载到集合中)并在 PDF 文档中创建价目表。最终结果是这样的:

有点丑。现在,如何创建三列来限制每一列中的字符?像 Office Word: 如您所见,在 Word 中我们可以创建列(在我的例子中是三个,行可见)。可以使用 iTextSharp 吗?我搜索但我找不到任何东西。以及不管名字的长短,如何把左边的名字和右边的价格对齐,还是Word?

【问题讨论】:

标签: c# pdf itext


【解决方案1】:

如果这是一个学校项目(我不确定你写的 “我正在从事一个“学习”项目”是什么意思),你可以通过以下方式向你的老师炫耀使用 iText 7 而不是过时的 iTextSharp。

顺便说一句:我们不再称它为 iTextSharp:它现在被称为 iText for .NET,这就解释了为什么 Stack Overflow 上不再有 iTextSharp 标记了。

iText 7 带有一个ColumnDocumentRenderer,允许您定义漂亮的列(参见教程的chapter 2)。大多数教程都是用 Java 编写的,因为一个优秀的 C# 开发人员应该知道如何阅读 Java,但也有一个带有列示例的 .NET 教程。见chapter 3.NET版iText 7快速入门教程:

Document document = new Document(pdf, ps);
//Set column parameters
float offSet = 36;
float columnWidth = (ps.GetWidth() - offSet * 2 + 10) / 3;
float columnHeight = ps.GetHeight() - offSet * 2;
//Define column areas
Rectangle[] columns = new Rectangle[] {
    new Rectangle(offSet - 5, offSet, columnWidth, columnHeight),
    new Rectangle(offSet + columnWidth, offSet, columnWidth, columnHeight),
    new Rectangle(offSet + columnWidth * 2 + 5, offSet, columnWidth, columnHeight)
};
document.SetRenderer(new ColumnDocumentRenderer(document, columns));

如果您想要漂亮的选项卡,可以使用 TabStop 类,如构建块教程的 chapter 3 中所述。

但是,iText 5 代码远不如 iText 7 代码直观。如果您需要 iText 5 解决方案,我可以扩展我的答案,但请注意,如果我是你的老师,我会让你因使用 iText 5 而失败。所以在我给你一个 iText 5 答案之前,我需要一些书面证据证明您的老师坚持使用 iText 5 解决方案。

【讨论】:

  • 感谢您的回答。我的老师没有说我必须使用什么版本的iText,所以我认为我可以使用7。我看到了第2章中的示例,ColumnDocumentRenderer,但我不知道如何在C#中使用它。我知道 Java,但我找不到 .NET 的方法
  • 您认为缺少哪种方法?我在Document.cs 中看到了SetRenderer(DocumentRenderer documentRenderer),我看到了DocumentRenderer.cs 类,你必须更清楚你找不到的到底是什么。你确定你在看 iText 7 吗?
猜你喜欢
  • 1970-01-01
  • 2015-07-26
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
相关资源
最近更新 更多