【问题标题】:problem in drawing a line in a pdf file using itextsharp使用 itextsharp 在 pdf 文件中画线的问题
【发布时间】:2011-07-03 11:16:08
【问题描述】:

我正在使用 itextsharp 在 asp.net c# 中生成一个 pdf 文件。我无法绘制水平线/垂直线/虚线。

我尝试使用以下代码画一条线,我没有收到任何错误,但该线也没有显示在 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();

代码有什么问题。是因为xy坐标的位置吗?我曾使用粗略的点来了解 pdf 中的大致位置,但该行从未出现在 pdf 文件中。

我正在寻找的输出如下图所示。

【问题讨论】:

  • 以防万一:您不想在 PDF 中写入行来编辑信息?您实际上需要删除行下方的文本内容,否则人们仍然可以从 PDF 中提取它。

标签: c# asp.net pdf-generation itextsharp


【解决方案1】:
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);

【讨论】:

    【解决方案2】:

    您应该始终确保为您正在执行的操作设置颜色,否则您将不知道会得到什么(它将来自之前执行的任何操作)。尝试做 cb.setStrokeColor(255, 0, 0) (纯红色),直到你得到你想要的线条。

    【讨论】:

    • 为我工作。你打败了我。
    • 错误:方法“SetColorStroke”没有重载需要“3”个参数
    • 从 5.3.2.0 版本开始,您可以使用 cb.SetColorStroke(new BaseColor(255,0,0));
    【解决方案3】:

    您确定 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();
    

    【讨论】:

      【解决方案4】:

      iTextsharp Line Draw:-

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

      【讨论】:

        【解决方案5】:

        您知道在 iTextsharp 中,坐标系统从左下角向上工作 - 您确定您的线没有被画到页面下方吗?

        【讨论】:

        • 是的,我知道在 iTextsharp 中,坐标系统从左下角向上工作,是的,我检查了整个页面。
        【解决方案6】:

        我最终将 plinth 提供的答案与上面的 less 结合使用。使用 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();
        

        【讨论】:

          【解决方案7】:
          Dim line1 As New iTextSharp.text.pdf.draw.LineSeparator(0.0F, 100.0F, BaseColor.Black, Element.ALIGN_LEFT, 1)
          pdfDoc.Add(New Chunk(line1))
          

          【讨论】:

          • 不是我的反对票,但这与lessly's answer 不一样吗?为什么这样更好?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-06
          • 1970-01-01
          相关资源
          最近更新 更多