c# - 使用 iText7 将文本写入段落中的固定位置

标签 c# wpf itext itext7

我尝试使用 c# 中的 iText7 编写一个带有标题、 Logo 和表格的 pdf 文件。

我以前从未使用过 iText7,因此我不知道如何将段落中的文本写入到固定位置。

现在我只是使用制表符作为我的文本的 anchor 。但这里的问题是,当字符串太长时,该行中后面的所有内容都将被制表符移动,并且标题中的“列”不再对齐。

下图是我想要实现的:

header with correct text alignment

此图显示了如果字符串太长会发生什么情况(在本示例中我使用了长用户名):

header with too long username

这是我用来编写一行标题的代码片段:

// generate 8 tabstops to split pdf in equal sections
List<TabStop> tabStops = new List<TabStop>();
for (uint i = 0; i < 8; i++)
{
    float tabSize = pageSize.GetWidth() / 8;
    tabStops.Add(new TabStop(tabSize, TabAlignment.LEFT));
}

Paragraph p = new Paragraph();
p.SetFontSize(10);

// add tabstops to paragraph for text alignment
p.AddTabStops(tabStops);

// add title of header 
p.Add(title1).Add("\n");

// write line one of header 
p.Add("Serie: ").Add(new Tab()).Add(info.serial.ToString())
    .Add(new Tab()).Add(new Tab())
    .Add("Input CSV: ").Add(new Tab()).Add(info.inputFileName)
    .Add(new Tab()).Add(new Tab()).Add("Out-Series: ")
    .Add(info.serial.ToString()).Add("\n");
// line 2...
p.Add("User: ").Add(new Tab()).Add(info.username)
    .Add(new Tab()).Add(new Tab()).Add(new Tab())
    .Add("qPCR-Datei: ").Add(new Tab()).Add(info.qpcr1FileName)
    .Add(new Tab()).Add(new Tab()).Add(new Tab())
    .Add("STR-Out: ").Add(strFileName).Add("\n");

我希望有人可以帮助我向我展示更好的文本对齐方式或提供在哪里查看的信息。

另一个不错的技巧是如何将换行符保留在同一制表位部分。例如,如果文件名太长(图中的“STR-Out:”),将执行换行符,但新行中的文件名部分应保留在“STR-OUT:”后面的制表位

最佳答案

使用表格和单元格代替制表符/制表符空间,以便正确对齐。

创建第 8 列大小的表格(标签、值、空格、标签、值、空格、标签、值)

使用此示例代码。

PdfPTable table = new PdfPTable(8);

PdfPCell cell;

cell = new PdfPCell();

cell.setRowspan(2); //only if spanning needed

table.addCell(cell);

for(int aw=0;aw<8;aw++){

table.addCell("hi");

}

关于c# - 使用 iText7 将文本写入段落中的固定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66008312/

相关文章:

c# - 如何创建一系列字母和数字的字符串组合?

c# - 如何将 BitmapImage 从后台线程传递到 WPF 中的 UI 线程?

java - Java Android 中的 C# OfType

java - 签署 PDF 文档并以字节或流的形式获取 pdf

c# - HR 标签未在 iTextSharp 中实现

c# - 项目 X 的​​目标是 '.NETStandard,Version=v1.6' 。它不能被以 '.NETFramework,Version=v4.6.1' 为目标的项目引用

c# - 使用 WebBrowser WPF 控件以编程方式填写一些 Web 表单

.net - 何时在mvvm应用程序中使用值转换器?

c# - 项目控制 "Overflow to Popup"

c# - PdfContentByte.SetFontAndSize() 抛出 "Object reference not set to instance of object"