gpt4 book ai didi

c# - 代码未在我的 PDF 中绘制水平线

转载 作者:太空狗 更新时间:2023-10-29 21:06:53 26 4
gpt4 key购买 nike

我试图在顶部添加一条水平线,以将标题文本与我的 pdf 文件中的实际值分开: enter image description here

这是我的代码:

public class StudentList
{
public void PrintStudentList(int gradeParaleloID)
{
StudentRepository repo = new StudentRepository();
var students = repo.FindAllStudents()
.Where(s => s.IDGradeParalelo == gradeParaleloID);

try
{
Document document = new Document(PageSize.LETTER);

PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\Alumnos.pdf", FileMode.Create));
document.Open();

PdfContentByte cb = writer.DirectContent;
cb.SetLineWidth(2.0f); // Make a bit thicker than 1.0 default
cb.SetGrayStroke(0.95f); // 1 = black, 0 = white
cb.MoveTo(20, 30);
cb.LineTo(400, 30);
cb.Stroke();

PdfPTable table = new PdfPTable(3);
float[] widths = new float[] { 0.6f, 0.75f, 2f };
table.SetWidths(widths);
PdfPCell numeroCell = new PdfPCell(new Phrase("Nro."));
numeroCell.Border = 0;
numeroCell.HorizontalAlignment = 0;
table.AddCell(numeroCell);

PdfPCell codigoCell = new PdfPCell(new Phrase("RUDE"));
codigoCell.Border = 0;
codigoCell.HorizontalAlignment = 0;
table.AddCell(codigoCell);

PdfPCell nombreCell = new PdfPCell(new Phrase("Apellidos y Nombres"));
nombreCell.Border = 0;
nombreCell.HorizontalAlignment = 0;
table.AddCell(nombreCell);

int c = 1;
foreach (var student in students)
{
PdfPCell cell = new PdfPCell(new Phrase(c.ToString()));
cell.Border = 0;
cell.HorizontalAlignment = 0;
table.AddCell(cell);

cell = new PdfPCell(new Phrase(student.Rude.ToString()));
cell.Border = 0;
cell.HorizontalAlignment = 0;
table.AddCell(cell);

cell = new PdfPCell(new Phrase(student.LastNameFather + " " + student.LastNameMother + " " + student.Name));
cell.Border = 0;
cell.HorizontalAlignment = 0;
table.AddCell(cell);
c++;
}
table.SpacingBefore = 20f;
table.SpacingAfter = 30f;

document.Add(table);
document.Close();
}
catch (DocumentException de)
{
Debug.WriteLine(de.Message);
}
catch (IOException ioe)
{
Debug.WriteLine(ioe.Message);
}

}
}

我不明白为什么 cb.Stroke() 不工作。有什么建议吗?

最佳答案

使用 iTextSharp 的 PdfContentByte 类绘图可能会有点困惑。高度实际上是相对于底部,而不是顶部。所以页面的顶部不是 0f,而是实际上 document.Top,在您的 PageSize.LETTER 页面大小上它是 726f。因此,如果您想从顶部绘制 30 个单位的线,请尝试:

cb.MoveTo(20, document.Top - 30f);
cb.LineTo(400, document.Top - 30f);

只是好奇——为什么要用困难的方式而不是使用表格边框? (我注意到您将边框设置为 0)尝试用手隔开线条是最大的痛苦。如果您移动 PDF 中的内容,则必须确保您的测量仍然有效。

试试这个:

numeroCell.Border = 0;
numeroCell.BorderColorBottom = new BaseColor(System.Drawing.Color.Black);
numeroCell.BorderWidthBottom = 1f;

codigoCell.Border = 0;
codigoCell.BorderColorBottom = new BaseColor(System.Drawing.Color.Black);
codigoCell.BorderWidthBottom = 1f;

nombreCell.Border = 0;
nombreCell.BorderColorBottom = new BaseColor(System.Drawing.Color.Black);
nombreCell.BorderWidthBottom = 1f;

这应该会在标题行下方提供一条漂亮的黑色实线,无需测量:

Table border sample

关于c# - 代码未在我的 PDF 中绘制水平线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4894329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com