※ itextsharp-dll-core しか使用していませんJava 用のものから移行しました。Java => C# なので殆ど変更するところはありませんでしたが、メソッドの頭を大文字にするのと、getter を プロパティに変更する作業が殆どでした。 itextsharp.dll は、プロジェクトを作成して NuGet コンソールで 『Install-Package iTextSharp』と実行すると packages というフォルダが作成されて中にインストールされます。 ビルドは、Visual Studio で作って動作確認したものを、バッチファイルでビルドするようにしたのがダウンロードファイルです。ですから、中には、ファイルが4つ入っているだけです。これに加えて『itextsharp.dll』と『iTextSharp.xml』を配置して build.bat を実行すると itext.exe が作成されます。
prompt cs$G setlocal set PATH=C:\Windows\Microsoft.NET\Framework\v4.0.30319;%PATH% csc.exe itext.cs /r:itextsharp.dll endlocal※ このパスは、VS2010( Framework4.0 )用です。 出来上がる pdf は、Java もそうですが、埋め込みで行っています。『埋め込む』と言う事は、OS 上にそのフォントが無くても正しく表示されるという事です( 反面、pdf の大きさは大きくなります ) 使い方としては、フォントにはフリーフォント(埋め込む事を著作者が許可しているフォント)を使って pdf を作成するといいと思います。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Reflection;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
itext();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine("処理が終了しました");
}
static void itext()
{
string thisPath = Assembly.GetExecutingAssembly().Location;
string thisDir = Path.GetDirectoryName(thisPath);
Console.WriteLine(thisDir);
string pdf = thisDir + @"\pdftest.pdf";
Document doc = new Document();
// 出力先を指定し、文書をPDFとして出力
PdfWriter pw = PdfWriter.GetInstance(
doc,
new FileStream(pdf, FileMode.Create)
);
// 出力開始
doc.Open();
// Windows ディレクトリを取得
string windir = System.Environment.GetEnvironmentVariable("windir");
Console.WriteLine(windir);
// 日本語フォントの設定
Font font = new Font(
BaseFont.CreateFont(
windir + @"\Fonts\meiryo.ttc,0",
BaseFont.IDENTITY_H,
BaseFont.EMBEDDED
)
);
/*
// フリーフォントでテスト
// ttf の場合は ファイル名だけで指定します( ttc は複数のフォントが入っています )
Font font = new Font(
BaseFont.CreateFont(
@"C:\Users\lightbox\Desktop\作業\FONT\ArmedBanana\ArmedBanana\ArmedBanana.ttf",
BaseFont.IDENTITY_H,
BaseFont.EMBEDDED
)
);
*/
Font font2 = new Font(
BaseFont.CreateFont(
windir + @"\Fonts\meiryo.ttc,1",
BaseFont.IDENTITY_H,
BaseFont.EMBEDDED
)
);
// *****************************************************************
// 座標指定する為のオブジェクト
// *****************************************************************
// 一番上のレイヤー
PdfContentByte pcb = pw.DirectContent;
// 一番上のレイヤーに直線を引く
pcb.MoveTo(0, 820);
pcb.LineTo(595, 820);
pcb.Stroke();
ColumnText ct = new ColumnText(pcb);
Phrase myText = null;
String line_text = null;
int x1 = 400;
int x2 = 595;
line_text = "1234567890123456789012345678901234567890";
myText = new Phrase(line_text, font);
ct.SetSimpleColumn(
myText,
x1, 0, // 書き込み対象の左下の座標
x2, 810, // 書き込み対象の右上の座標
20, // 行間
Element.ALIGN_LEFT
);
ct.Go();
line_text = "ニ行目";
myText = new Phrase(line_text, font);
ct.SetSimpleColumn(
myText,
x1, 0,
x2, 750,
0,
Element.ALIGN_LEFT
);
ct.Go();
line_text = "三行目";
myText = new Phrase(line_text, font);
ct.SetSimpleColumn(
myText,
x1, 0,
x2, 735,
0,
Element.ALIGN_LEFT
);
ct.Go();
line_text = "四行目";
// *****************************************************************
// 右寄せ
// *****************************************************************
int right_offset = 50;
myText = new Phrase(line_text, font);
ct.SetSimpleColumn(
myText,
x1, 0,
x2 - right_offset, 720,
0,
Element.ALIGN_LEFT
);
ct.Go();
int top = 700;
myText = new Phrase("left:" + doc.PageSize.Left, font2);
ct.SetSimpleColumn(
myText,
x1, 0,
x2 - right_offset, top,
0,
Element.ALIGN_RIGHT
);
ct.Go();
top -= 10;
myText = new Phrase("right:" + doc.PageSize.Right, font2);
ct.SetSimpleColumn(
myText,
x1, 0,
x2 - right_offset, top,
0,
Element.ALIGN_RIGHT
);
ct.Go();
top -= 10;
myText = new Phrase("top:" + doc.PageSize.Top, font2);
ct.SetSimpleColumn(
myText,
x1, 0,
x2 - right_offset, top,
0,
Element.ALIGN_RIGHT
);
ct.Go();
top -= 10;
myText = new Phrase("bottom:" + doc.PageSize.Bottom, font2);
ct.SetSimpleColumn(
myText,
x1, 0,
x2 - right_offset, top,
0,
Element.ALIGN_RIGHT
);
ct.Go();
// *****************************************************************
// 真ん中のレイヤー( 通常の文字列や画像・グラフィックの追加 )
// *****************************************************************
Image img = Image.GetInstance("_img.jpg");
img.SetAbsolutePosition(140, 620);
img.ScalePercent(50);
doc.Add(img);
doc.Add(new Paragraph(" ", font)); // 改行
doc.Add(new Paragraph(" ", font));
doc.Add(new Paragraph(" ", font));
doc.Add(new Paragraph(" ", font));
doc.Add(new Paragraph(" ", font));
doc.Add(new Paragraph("文を 一行出力", font));
doc.Add(new Paragraph("文を 一行出力", font));
doc.Add(new Paragraph("文を 一行出力", font));
doc.Add(new Paragraph("文を 一行出力", font));
doc.Add(new Paragraph("文を 一行出力", font));
doc.Add(new Paragraph(" ", font));
Paragraph p = new Paragraph();
for (int i = 0; i < 25; i++)
{
p.Add(
new Chunk(
"日本語表示の一般テキストを繰り返し表示しています。"
, font
)
);
}
doc.Add(p);
// 出力終了
doc.Close();
}
}
}
itextsharp-all ダウンロード
|
|
【VS(C#)の最新記事】
- Replit : cs-list
- C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
- C#( Form ) : ウインドウ枠の無い吹き出しの作成
- C# のタプル( Visual Studio 2017 でテスト )
- C# : インターネット上の JSON ファイルのフォーマットを クラスとして定義して1行でオブジェクト化して使用する
- C# の文法的文字列処理
- C# : System.Data.Odbc によるデータベースのテーブルからのデータ取得処理( サンプルの SQL は MySQL 用です )
- C# : Excel を データベースとして DataGridView に読み込む
- C# : dynamic 型 による Excel へのアクセス
- C# : フォームを表示せずに、通知領域にアイコンを表示させる常駐プログラム
- Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード
- C# : System.Data.Odbc データ取得(SELECT)処理( MySQL ) : ※ using 無し( Dispose 実行 )
- C# : SQL 文を外部テキストにして、String.Format でデータ部分を置き換えて利用する
- C# コンソールアプリを AN HTTPD で実行
- C# : SQLServer( SQLExpress ) の SMO を使用してテーブルの CREATE TABLE 文 を取得する
- C# : DataGridView に TKMP.DLL の IMAP(POP3) で受信したメールを非同期に表示する( 添付ファイルも取得 )
- C# : TKMP.DLLを使った、メール送信テンプレート
- C# と VB.net : TKMP.DLL を使って IMAP でメール本文の一覧を取得する( コンソール )
- C# でDataTable と DataSource を使用して、DataGridView にデータを表示するテンプレート( 行をダブルクリックしてダイアログを表示して行データを処理 )
- (C#) / VS2010 または VS2012 : TKMP.DLL(3.1.2 または 3.1.8)を使った、『さくらインターネット』用メール送信テンプレート







