web-dev-qa-db-ja.com

itextsharpを使用してPDFファイルに線を引く際の問題

Itextsharpを使用してasp.netc#で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ファイルにその行が表示されることはありません。

私が探している出力は下の画像のようです。enter image description here

11
Ishan

実行している操作の色を必ず設定する必要があります。そうしないと、何が得られるかわかりません(以前に実行した操作からの色になります)。目的の場所に行が表示されるまで、cb.setStrokeColor(255、0、0)(純粋な赤)を実行してみてください。

5
plinth
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);
15
ettore ct

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))
4
lessly

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();
3
JoR

結局、台座からの答えと上からの答えを組み合わせて使うことになりました。 StringBuilder関数を使用すると、TDタグとWordのすべての幅を占めるテーブルセルがない限り、ブロックしてから手動で線を引くことができます。

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();
0
user1143550

ITextsharpでは、座標系が左下隅から上に向かって機能することをご存知ですか?線がページのさらに下に描画されていないことを確認しますか?

0
Paddy