5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C# PDFlib 使い方の簡単な例

Posted at

 2015-04-10 11.33.51.png

PDFlib について

PDFlib は PHP や、C++、Javaや .NET、Ruby から PDF を作成するための有料のライブラリです。仕事で使うことがあったのでメモ。

環境

  • Windows 7 Professional
  • Visual Studio 2015 Professional
  • IIS 7.5

ダウンロード

PDFlib 有料製品なのですが、テストでの利用も可能だよ
PDFlib Download

インストール

2015.04.10 の時点のバージョンは 9.0.4 で ダウンロードをすると「PDFlib-9.0.4-MSWin32-.NET.msi」というインストーラが手に入るよ

インストールが終わると「C:\Users\*********\Documents」に「PDFlib」というディレクトリができているよ。

「C:\Users\*********\Documents\PDFlib\PDFlib 9.0.4 32-bit.NET Framework 4.0\bin」に「PDFlib_dotnet.dll」があるので Visual Studio (以下、VS)で作成したプロジェクトのbinにでも突っ込んで参照設定に追加しましょう。

今回は、Web上で Visitor の操作で PDF を作成するという想定で作るので、WebForm で空の Webアプリケーションを作成。「inetpub/wwwroot/ProjectName/bin」に PDFlib_dotnet.dll を突っ込んだ。

Sample.aspx の作成

jQuery でちょっとした 連打対策だけしておいた。更には結果表示用の Literal もとりあえず用意。


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Sample.aspx.cs" Inherits="PDFlibProject.Sample" %>

<!DOCTYPE html>

<html lang="ja">
<head runat="server">
	<meta charset="UTF-8">
	<title>Document</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script>
        function buttonDisable()
        {
            jQuery("#ExecuteButton").fadeOut();
            return true;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <p><asp:Button runat="server" ID="ExecuteButton" Text="Create" OnClientClick="return buttonDisable();" OnClick="ExecuteButton_Click"  /></p>
        <p><asp:Literal runat="server" ID="StatusText"></asp:Literal></p>
    </div>
    </form>
</body>
</html>

using の追加

C#側。

まずは using に追加

using System;
using PDFlib_dotnet;

namespace PDFlibProject
{
    public partial class Sample : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

次に以下の設定用変数を用意


using System;
using PDFlib_dotnet;

namespace PDFlibProject
{
    public partial class Sample : System.Web.UI.Page
    {
        /// <summary>
        /// PDFlib オブジェクト
        /// </summary>
        private PDFlib p;

        /// <summary>
        /// font の読み込み判定を格納
        /// </summary>
        private int font;

        /// <summary>
        /// font サイズを設定
        /// </summary>
        private float fontSize = 10;

        /// <summary>
        /// PDF ファイル名
        /// </summary>
        private string fileName;
        
        /// <summary>
        /// 表示するテキスト
        /// </summary>
        private string displayText;
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

Create ボタンをクリックされた際に動くメソッドを用意

using System;
using PDFlib_dotnet;

namespace PDFlibProject
{
    public partial class Sample : System.Web.UI.Page
    {
        /// <summary>
        /// PDFlib オブジェクト
        /// </summary>
        private PDFlib p;

        /// <summary>
        /// font の読み込み判定を格納
        /// </summary>
        private int font;

        /// <summary>
        /// font サイズを設定
        /// </summary>
        private float fontSize = 10;

        /// <summary>
        /// PDF ファイル名
        /// </summary>
        private string fileName;
        
        /// <summary>
        /// 表示するテキスト
        /// </summary>
        private string displayText;


        protected void Page_Load(object sender, EventArgs e)
        {


        }

        /// <summary>
        /// PDF作成プログラム
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ExecuteButton_Click(object sender, EventArgs e)
        {

        }
    }
}

PDFlib オブジェクトの生成と各種設定


/// <summary>
/// PDF作成プログラム
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ExecuteButton_Click(object sender, EventArgs e)
{
	p = new PDFlib();

	fileName = "Sample.pdf";

	p.set_option("errorpolicy=return");
	p.set_option("SearchPath={C:\\Windows\\Fonts}");
	p.set_option("FontOutline={Meiryo=meiryo.ttc}");

	displayText = "Hello World";
}

PDFlib オブジェクト(PDFドキュメント)をメモリ上に作成

/// <summary>
/// PDF作成プログラム
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ExecuteButton_Click(object sender, EventArgs e)
{
	p = new PDFlib();

	fileName = "Sample.pdf";

	p.set_option("errorpolicy=return");
	p.set_option("SearchPath={C:\\Windows\\Fonts}");
	p.set_option("FontOutline={Meiryo=meiryo.ttc}");

	displayText = "Hello World";

	if (p.begin_document(Server.MapPath("./") + fileName, "") == -1)
	{
		return;
	}

}

Fontの設定を試みる

/// <summary>
/// PDF作成プログラム
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ExecuteButton_Click(object sender, EventArgs e)
{
	p = new PDFlib();

	fileName = "Sample.pdf";

	p.set_option("errorpolicy=return");
	p.set_option("SearchPath={C:\\Windows\\Fonts}");
	p.set_option("FontOutline={Meiryo=meiryo.ttc}");

	displayText = "Hello World";

	if (p.begin_document(Server.MapPath("./") + fileName, "") == -1)
	{
		return;
	}


	font = p.load_font("Meiryo", "unicode", "");

	if (font == -1)
	{
		return;
	}

}

実際に描画していく

/// <summary>
/// PDF作成プログラム
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ExecuteButton_Click(object sender, EventArgs e)
{
	p = new PDFlib();

	fileName = "Sample.pdf";

	p.set_option("errorpolicy=return");
	p.set_option("SearchPath={C:\\Windows\\Fonts}");
	p.set_option("FontOutline={Meiryo=meiryo.ttc}");

	displayText = "Hello World";

	if (p.begin_document(Server.MapPath("./") + fileName, "") == -1)
	{
		return;
	}


	font = p.load_font("Meiryo", "unicode", "");

	if (font == -1)
	{
		return;
	}



	p.begin_page_ext(595,842,"topdown");
	p.setfont(font, fontSize);
	p.set_text_pos(100, 100);
	p.show(displayText);

	p.end_page_ext("");

	p.end_document("");

	this.StatusText.Text = "作成完了";
}

でこんなんが出来上がる

 2015-04-10 12.45.33.png

文字列を追加

/// <summary>
/// PDF作成プログラム
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ExecuteButton_Click(object sender, EventArgs e)
{
	p = new PDFlib();

	fileName = "Sample.pdf";

	p.set_option("errorpolicy=return");
	p.set_option("SearchPath={C:\\Windows\\Fonts}");
	p.set_option("FontOutline={Meiryo=meiryo.ttc}");

	displayText = "Hello World";

	if (p.begin_document(Server.MapPath("./") + fileName, "") == -1)
	{
		return;
	}


	font = p.load_font("Meiryo", "unicode", "");

	if (font == -1)
	{
		return;
	}



	p.begin_page_ext(595,842,"topdown");
	p.setfont(font, fontSize);
	p.set_text_pos(100, 100);
	p.show(displayText);

	p.set_text_pos(200, 200);
	p.show(displayText);

	p.end_page_ext("");

	p.end_document("");

	this.StatusText.Text = "作成完了";
}

set_text_posとshowを追加することで別の場所に追加ができるよ。
結果はこんな感じ

 2015-04-10 12.47.32.png

5
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?