注意)iTextSharpを初めて使ったので間違いがあるかもしれません。
iTextSharpは「NuGet Gallery | iTextSharp 5.5.13.2 」こちらでいいでしょうか?
PLEASE NOTE: iTextSharp is EOL, and has been replaced by iText 7. Only security fixes will be added
注:iTextSharpはEOLであり、iText 7に置き換えられました。セキュリティ修正のみが追加されます
と移行を促されているようですが。
このページには、BorderStyle列挙型のフィールドで、3は破線であると書かれていました。
見るところが根本的に違います。なぜそれが使えると思ったのかが不思議です。
見るのでしたらこちらです(iTextSharpはiText5系のようで、Java版しかありませんがヒントにはなります)
iText pdf library API documentation for Java and .Net
本題のボーダーですが、どうやら自分で描画するしかないようです^^;
しかし本家サイトにサンプルがありますので、CustomBorder3
をベースにざっと移してみました。
How to define different border types for a single cell?
cs
1 using System . IO ;
2 using iTextSharp . text ;
3 using iTextSharp . text . pdf ;
4
5 namespace Questions292675
6 {
7 internal class Program
8 {
9 private static void Main ( )
10 {
11 using ( var doc = new Document ( PageSize . A4 ) )
12 {
13 PdfWriter . GetInstance ( doc , new FileStream ( "BorderTest.pdf" , FileMode . Create ) ) ;
14 doc . Open ( ) ;
15
16 var solid = new SolidLine ( 1 ) ; // 普通の
17 var dotted = new DottedLine ( 1 ) ; // 点々
18 var dashed = new DashedLine ( 1 ) ; // 破線
19
20 var table = new PdfPTable ( 1 ) ;
21
22 var cell = new PdfPCell ( new Phrase ( "sample" ) )
23 {
24 HorizontalAlignment = 1 ,
25 VerticalAlignment = 1 ,
26
27 Border = 0 , // 通常のボーダーは引かない
28 // 独自セルレンダラーを追加し描画 左,右,上,下
29 CellEvent = new CustomBorder ( null , solid , dotted , dashed ) ,
30 } ;
31
32 table . AddCell ( cell ) ;
33 doc . Add ( table ) ;
34 }
35
36 System . Diagnostics . Process . Start ( "BorderTest.pdf" ) ;
37 }
38 }
39
40 internal interface ILineDash
41 {
42 void ApplyLineDash ( PdfContentByte canvas ) ;
43 }
44
45 internal abstract class AbstractLineDash : ILineDash
46 {
47 private float lineWidth ;
48 public AbstractLineDash ( float lineWidth ) => this . lineWidth = lineWidth ;
49 public virtual void ApplyLineDash ( PdfContentByte canvas ) => canvas . SetLineWidth ( lineWidth ) ;
50 }
51
52 internal class SolidLine : AbstractLineDash
53 {
54 public SolidLine ( float lineWidth ) : base ( lineWidth ) { }
55 }
56
57 internal class DottedLine : AbstractLineDash
58 {
59 public DottedLine ( float lineWidth ) : base ( lineWidth ) { }
60 public override void ApplyLineDash ( PdfContentByte canvas )
61 {
62 base . ApplyLineDash ( canvas ) ;
63 canvas . SetLineCap ( PdfContentByte . LINE_CAP_ROUND ) ;
64 canvas . SetLineDash ( 0 , 4 , 2 ) ;
65 }
66 }
67
68 internal class DashedLine : AbstractLineDash
69 {
70 public DashedLine ( float lineWidth ) : base ( lineWidth ) { }
71 public override void ApplyLineDash ( PdfContentByte canvas )
72 {
73 base . ApplyLineDash ( canvas ) ;
74 canvas . SetLineDash ( 3 , 3 ) ;
75 }
76 }
77
78 internal class CustomBorder : IPdfPCellEvent
79 {
80 protected ILineDash left ;
81 protected ILineDash right ;
82 protected ILineDash top ;
83 protected ILineDash bottom ;
84 public CustomBorder ( ILineDash left , ILineDash right , ILineDash top , ILineDash bottom )
85 {
86 this . left = left ;
87 this . right = right ;
88 this . top = top ;
89 this . bottom = bottom ;
90 }
91
92 public void CellLayout ( PdfPCell cell , Rectangle position , PdfContentByte [ ] canvases )
93 {
94 var canvas = canvases [ PdfPTable . LINECANVAS ] ;
95 if ( top != null )
96 {
97 canvas . SaveState ( ) ;
98 top . ApplyLineDash ( canvas ) ;
99 canvas . MoveTo ( position . Right , position . Top ) ;
100 canvas . LineTo ( position . Left , position . Top ) ;
101 canvas . Stroke ( ) ;
102 canvas . RestoreState ( ) ;
103 }
104 if ( bottom != null )
105 {
106 canvas . SaveState ( ) ;
107 bottom . ApplyLineDash ( canvas ) ;
108 canvas . MoveTo ( position . Right , position . Bottom ) ;
109 canvas . LineTo ( position . Left , position . Bottom ) ;
110 canvas . Stroke ( ) ;
111 canvas . RestoreState ( ) ;
112 }
113 if ( right != null )
114 {
115 canvas . SaveState ( ) ;
116 right . ApplyLineDash ( canvas ) ;
117 canvas . MoveTo ( position . Right , position . Top ) ;
118 canvas . LineTo ( position . Right , position . Bottom ) ;
119 canvas . Stroke ( ) ;
120 canvas . RestoreState ( ) ;
121 }
122 if ( left != null )
123 {
124 canvas . SaveState ( ) ;
125 left . ApplyLineDash ( canvas ) ;
126 canvas . MoveTo ( position . Left , position . Top ) ;
127 canvas . LineTo ( position . Left , position . Bottom ) ;
128 canvas . Stroke ( ) ;
129 canvas . RestoreState ( ) ;
130 }
131 }
132 }
133 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/24 08:21
2020/09/24 08:46
2020/09/24 10:10
2020/09/24 10:31
2020/09/24 10:40
2020/09/24 10:46