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ファイルにその行が表示されることはありません。
私が探している出力は下の画像のようです。
実行している操作の色を必ず設定する必要があります。そうしないと、何が得られるかわかりません(以前に実行した操作からの色になります)。目的の場所に行が表示されるまで、cb.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();
結局、台座からの答えと上からの答えを組み合わせて使うことになりました。 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();
ITextsharpでは、座標系が左下隅から上に向かって機能することをご存知ですか?線がページのさらに下に描画されていないことを確認しますか?