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 = "作成完了";
}
でこんなんが出来上がる
文字列を追加
/// <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を追加することで別の場所に追加ができるよ。
結果はこんな感じ