проблема при рисовании линии в pdf-файле с помощью itextsharp

Я создаю pdf-файл в asp.net c# с помощью itextsharp. я не могу нарисовать горизонтальную линию/вертикальную линию/пунктирную линию.

Я попытался нарисовать линию, используя следующий код, я не получаю ошибок, но строка также не отображается в файле pdf

    PdfContentByte cb = wri.DirectContent;
    cb.SetLineWidth(2.0f);   // Make a bit thicker than 1.0 default
    cb.MoveTo(20, pdfDocument.Top - 40f);
    cb.LineTo(400, pdfDocument.Top - 40f);
    cb.Stroke();

в чем проблема в коде.Это из-за положения координат x y? Я использовал грубые точки, чтобы узнать приблизительную позицию в pdf,но линия никогда не обезьянничает в pdf файл.

выход я ищу, как показано на рисунке ниже.enter image description here

7 ответов


вы всегда должны следить за тем, чтобы установить цвет для операции, которую вы выполняете, иначе вы не будете знать, что вы получите (это будет от любой предыдущей операции). Попробуйте сделать ЦБ.setStrokeColor (255, 0, 0) (чистый красный), пока вы не получите свою линию, где хотите.


Paragraph p = new Paragraph(new Chunk(new iTextSharp.text.pdf.draw.LineSeparator(0.0F, 100.0F, BaseColor.BLACK, Element.ALIGN_LEFT, 1)));
document.Add(p);

iTextsharp ничья линии:-

Dim line1 As New iTextSharp.text.pdf.draw.LineSeparator(0.0F, 100.0F, BaseColor.Black, Element.ALIGN_LEFT, 1)
pdfDoc.Add(New Chunk(line1))

вы уверены, что pdfDocument.Top возвращает значение? Я использовал PageSize.Width and PageSize.Height

iTextSharp.text.Document myDocument = new Document(PageSize.A4);
PdfContentByte contentByte = writer.DirectContent;
contentByte.SetLineWidth(1);
contentByte.MoveTo(0,  14);
contentByte.LineTo(myDocument.PageSize.Width,14);
contentByte.Stroke();

вы знаете, что в iTextsharp система координат работает от нижнего левого угла вверх - вы уверены, что ваша линия не рисуется дальше вниз по странице?


Я закончил тем, что использовал комбинацию ответа, предоставленного plinth вместе с lessly сверху. Используя функции StringBuilder, вы можете блокировать вещи, а затем вручную нарисовать линию, если у вас нет ячейки таблицы, которая занимает всю ширину тега TD вместе со словом.

StringBuilder chistHeader = new StringBuilder();
StringBuilder chistCourses = new StringBuilder();

HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("content-disposition", "inline;filename=CourseHistory.pdf");
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);

Document pdfDoc = new Document();
PdfWriter.GetInstance(pdfDoc, HttpContext.Current.Response.OutputStream);

pdfDoc.Open();

chistHeader = CourseHistoryHeader(Convert.ToInt32(hdUserID.Value), hdSystemPath.Value, "CourseHistory");
chistCourses = CourseHistoryCourses(Convert.ToInt32(hdUserID.Value), hdSystemPath.Value, "CourseHistory");



        //write header for the pdf
foreach (IElement element in HTMLWorker.ParseToList(new StringReader(chistHeader.ToString()), new StyleSheet()))
    {
        pdfDoc.Add(element);
    }

//have to manually draw a line this way as ItextSharp doesn't allow a <hr> tag....
iTextSharp.text.pdf.draw.LineSeparator line1 = new    iTextSharp.text.pdf.draw.LineSeparator(1f, 100f, BaseColor.BLACK, Element.ALIGN_LEFT, 1);
pdfDoc.Add(new Chunk(line1));

 //write out the list of courses
 foreach (IElement element in HTMLWorker.ParseToList(new StringReader(chistCourses.ToString()), new StyleSheet()))
    {
        pdfDoc.Add(element);
    }

 pdfDoc.Close();

 HttpContext.Current.Response.Write(pdfDoc);
 HttpContext.Current.Response.End();

Dim line1 As New iTextSharp.text.pdf.draw.LineSeparator(0.0F, 100.0F, BaseColor.Black, Element.ALIGN_LEFT, 1)
pdfDoc.Add(New Chunk(line1))