※ 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)を使った、『さくらインターネット』用メール送信テンプレート