1
using System;
2
using System.IO;
3
using System.Drawing;
4
using System.Collections;
5
using iTextSharp.text;
6
using iTextSharp.text.pdf;
7
8
namespace BluePoint.ERM.BPViewerCore
9
{
10
public class PDFHelper
11
{
12
private static Int64 _traceLevel;
13
private static string m_FontSrc ;
14
private iTextSharp.text.Document _document;
15
private PdfWriter _writer;
16
// closed
17
//private string _PDFFullFileName;
18
19
public void SavePDFDocument()
20
{
21
if (_document != null)
22
{
23
_document.Close();
24
}
25
}
26
public PDFHelper(string pdfFullFileName)
27
{
28
_document = new iTextSharp.text.Document();
29
try
30
{
31
if(File.Exists(pdfFullFileName))
32
{
33
File.Delete(pdfFullFileName);
34
}
35
_writer = PdfWriter.GetInstance(_document, new FileStream(pdfFullFileName,FileMode.Create));
36
}
37
catch(Exception e)
38
{
39
throw new Exception("can't create iTextSharp document object" + e.ToString ());
40
}
41
42
}
43
public static string FontSrc
44
{
45
get
46
{
47
if(PDFHelper.m_FontSrc == null)
48
{
49
PDFHelper.m_FontSrc = "c:\\windows\\fonts\\COUR.TTF";
50
}
51
return PDFHelper.m_FontSrc;
52
}
53
set
54
{
55
PDFHelper.m_FontSrc = value;
56
}
57
}
58
59
public PDFHelper()
60
{
61
//
62
// TODO: Add constructor logic here
63
//
64
}
65
66
public static void SetTraceLevel(Int64 val)
67
{
68
_traceLevel = val;
69
}
70
71
public static void Log(string s)
72
{
73
if((_traceLevel & 8) > 0)
74
{
75
System.Diagnostics.Trace.WriteLine("BPVR: " + s);
76
}
77
}
78
79
public void CreateSinglePagePDF(PageInfo pageInfo)
80
{
81
StopWatch sw = new StopWatch();
82
try
83
{
84
sw.Reset();
85
_document.SetPageSize (new iTextSharp.text.Rectangle(pageInfo.Setting.PageSizeWidth,
86
pageInfo.Setting.PageSizeHeight));
87
_document.SetMargins(pageInfo.Setting.PageMarginLeft,pageInfo.Setting.PageMarginRight,
88
pageInfo.Setting.PageMarginTop,pageInfo.Setting.PageMarginBottom);
89
90
Log("BPVR: time elapsed to setup document parameters: " + sw.ToMilliSeconds());
91
92
if(pageInfo.ImgFileName != "")
93
{
94
sw.Reset();
95
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(pageInfo.ImgFileName);
96
Log("BPVR: time elapsed to load image into iTextSharp: " + sw.ToMilliSeconds());
97
98
sw.Reset();
99
img.ScaleAbsolute(pageInfo.Setting.ImgWidht,pageInfo.Setting.ImgHeight);
100
101
Watermark watermark = new Watermark(img,pageInfo.Setting.WatermarkOffsetX ,
102
pageInfo.Setting.WatermarkOffsetY);
103
104
105
_document.Add(watermark);
106
Log("BPVR: time elapsed to add image to document: " + sw.ToMilliSeconds());
107
}
108
else
109
{
110
_document.RemoveWatermark();
111
}
112
113
sw.Reset();
114
_document.NewPage();
115
Log("BPVR: time elapsed to create new page: " + sw.ToMilliSeconds());
116
117
sw.Reset();
118
if(!_document.IsOpen())
119
{
120
_document.Open();
121
}
122
Log("BPVR: time elapsed to open document: " + sw.ToMilliSeconds());
123
124
sw.Reset();
125
System.Drawing.Font testFont = new System.Drawing.Font("courier new", 8);
126
Log("BPVR: time elapsed to create font in dotNet: " + sw.ToMilliSeconds());
127
//
128
129
sw.Reset();
130
BaseFont bf = BaseFont.CreateFont(FontSrc,"",true);
131
Log("BPVR: time elapsed to create font from ttf file: " + sw.ToMilliSeconds());
132
133
_writer.DirectContent.SetLeading( (float)((testFont.GetHeight()/pageInfo.Setting.DPI*72)));
134
135
sw.Reset();
136
_writer.DirectContent.BeginText();
137
_writer.DirectContent.SetTextMatrix(pageInfo.Setting.PageMarginLeft,
138
pageInfo.Setting.PageSizeHeight - pageInfo.Setting.PageMarginTop);
139
_writer.DirectContent.SetFontAndSize(bf, pageInfo.Setting.FontSize);
140
141
using(StringReader sr = new StringReader(pageInfo.TextFileName))
142
{
143
while(sr.Peek() >0)
144
{
145
_writer.DirectContent.SetCharacterSpacing(0.15f*pageInfo.Setting.FontSize/8);
146
_writer.DirectContent.NewlineShowText(sr.ReadLine());
147
}
148
}
149
150
151
// using(StreamReader sr = File.OpenText(pageInfo.TextFileName))
152
// {
153
// while(sr.Peek() > 0)
154
// {
155
// _writer.DirectContent.SetCharacterSpacing(0.15f*pageInfo.Setting.FontSize/8);
156
//
157
// _writer.DirectContent.NewlineShowText(sr.ReadLine());
158
// }
159
// }
160
//_writer.DirectContent.SetCharacterSpacing(0.15f*pageInfo.Setting.FontSize/8);
161
//_writer.DirectContent.NewlineShowText(pageInfo.TextFileName);
162
163
_writer.DirectContent.EndText();
164
Log("BPVR: time elapsed to write text: " + sw.ToMilliSeconds());
165
166
}
167
catch(Exception e)
168
{
169
throw new Exception("can't create single PDF page." + e.ToString());
170
}
171
}
172
173
174
}
175
176
177
public class PageInfo
178
{
179
public PageInfo()
180
{
181
}
182
public PageInfo(string imgFileName,string textFileName,
183
PageSetting pageSetting )
184
{
185
this.m_ImgFileName = imgFileName;
186
this.m_TextFileName = textFileName;
187
this.Setting = pageSetting;
188
}
189
public static PageInfo GetInstance(string imgFileName,string textFileName,
190
PageSetting pageSetting)
191
{
192
return new PageInfo(imgFileName,textFileName,pageSetting);
193
}
194
private string m_ImgFileName;
195
196
public string ImgFileName
197
{
198
get { return m_ImgFileName; }
199
set { m_ImgFileName = value; }
200
}
201
private string m_TextFileName;
202
203
public string TextFileName
204
{
205
get { return m_TextFileName; }
206
set { m_TextFileName = value; }
207
}
208
209
private PageSetting m_Setting;
210
211
public PageSetting Setting
212
{
213
get { return m_Setting; }
214
set { m_Setting = value; }
215
}
216
217
218
219
}
220
221
public class PageSetting
222
{
223
public static PageSetting Create(int pWith, int pHeight,
224
int pMarginL, int pMarginR, int pMarginT, int pMarginB,
225
int imgW, int imgH,
226
int offsetX, int offsetY,
227
int fontSize,
228
int dpi)
229
{
230
return new PageSetting(pWith, pHeight, pMarginL, pMarginR, pMarginT, pMarginB,
231
imgW, imgH,
232
offsetX, offsetY,
233
fontSize, dpi);
234
}
235
public static PageSetting Create(int pWith, int pHeight,
236
int pMarginL, int pMarginR, int pMarginT, int pMarginB,
237
int imgW, int imgH,
238
int offsetX, int offsetY,
239
int fontSize)
240
{
241
return new PageSetting(pWith, pHeight, pMarginL, pMarginR, pMarginT, pMarginB,
242
imgW, imgH,
243
offsetX, offsetY,
244
fontSize);
245
}
246
247
private PageSetting(double pWith,double pHeight,
248
int pMarginL,int pMarginR,int pMarginT,int pMarginB,
249
int imgW,int imgH,
250
int offsetX,int offsetY,
251
int fontSize,
252
int dpi)
253
{
254
m_PageSizeWidth = pWith;
255
m_PageSizeHeight = pHeight;
256
m_PageMarginLeft = pMarginL;
257
m_PageMarginRight = pMarginR;
258
m_PageMarginTop = pMarginT;
259
m_PageMarginBottom = pMarginB;
260
m_ImgWidht = imgW;
261
m_ImgHeight = imgH;
262
m_WatermarkOffsetX = offsetX;
263
m_WatermarkOffsetY = offsetY;
264
m_fontSize = fontSize;
265
m_DPI = (float)dpi;
266
267
}
268
private PageSetting(double pWith, double pHeight,
269
int pMarginL, int pMarginR, int pMarginT, int pMarginB,
270
int imgW, int imgH,
271
int offsetX, int offsetY,
272
int fontSize)
273
{
274
m_PageSizeWidth = pWith;
275
m_PageSizeHeight = pHeight;
276
m_PageMarginLeft = pMarginL;
277
m_PageMarginRight = pMarginR;
278
m_PageMarginTop = pMarginT;
279
m_PageMarginBottom = pMarginB;
280
m_ImgWidht = imgW;
281
m_ImgHeight = imgH;
282
m_WatermarkOffsetX = offsetX;
283
m_WatermarkOffsetY = offsetY;
284
m_fontSize = fontSize;
285
286
}
287
288
private float m_DPI = 96.0f;
289
private double m_PageSizeWidth;
290
291
public float PageSizeWidth
292
{
293
get { return (float)m_PageSizeWidth * 72; }
294
}
295
private double m_PageSizeHeight;
296
297
public float PageSizeHeight
298
{
299
get { return (float)m_PageSizeHeight * 72; }
300
301
}
302
private int m_PageMarginLeft;
303
304
public float PageMarginLeft
305
{
306
get { return m_PageMarginLeft/DPI*72; }
307
308
}
309
private int m_PageMarginRight;
310
311
public float PageMarginRight
312
{
313
get { return m_PageMarginRight/DPI*72; }
314
315
}
316
private int m_PageMarginTop;
317
318
public float PageMarginTop
319
{
320
get { return m_PageMarginTop / DPI * 72; }
321
322
}
323
private int m_PageMarginBottom;
324
325
public float PageMarginBottom
326
{
327
get { return m_PageMarginBottom / DPI * 72; }
328
329
}
330
private int m_ImgWidht;
331
332
public float ImgWidht
333
{
334
get { return m_ImgWidht / DPI * 72; }
335
336
}
337
private int m_ImgHeight;
338
339
public float ImgHeight
340
{
341
get { return m_ImgHeight / DPI * 72; }
342
343
}
344
private int m_WatermarkOffsetX;
345
346
public float WatermarkOffsetX
347
{
348
get { return (float)(m_WatermarkOffsetX / DPI * 72); }
349
350
}
351
private int m_WatermarkOffsetY;
352
353
public float WatermarkOffsetY
354
{
355
get
356
{
357
return (float)((m_PageSizeHeight * (int)DPI - m_ImgHeight - m_WatermarkOffsetY) / (int)DPI * 72);
358
}
359
}
360
private int m_fontSize;
361
362
public int FontSize
363
{
364
get { return m_fontSize; }
365
set { m_fontSize = value; }
366
}
367
368
369
public float DPI
370
{
371
get { return m_DPI; }
372
set { m_DPI = value; }
373
}
374
375
376
}
377
378
}
379

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379
