проблема при рисовании линии в 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 файл.
выход я ищу, как показано на рисунке ниже.
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))