*

PerlでPDFファイルに文字を上書き追加してみたの巻

公開日: : エクスペリエンス

一言

既存のPDFファイルに文字列を上書き追加する必要があったので、その備忘録
手間は掛かったけど、Google先生に聞き、簡単でした

はじめ

PDFファイルに文章を上書き追加する必要になりました
簡単、かんたんと思っていたら、コツがあるので、その備忘録
PDFによってはモジュールが読み込めないので、別モジュールで読み込む必要がありました

仕様

【機能】

  • PDFファイルの上部に別ファイルの文章を上書き追加する

【INPUT】

  • 1.pdf:上書き追加するPDFファイル
  • text.txt:上書き追加するPDFファイル

【OUTPUT】

  • addtext.pdf:上書き追加されたPDFファイル

【モジュール】

  • CAM::PDF:PDF編集操作モジュール
  • PDF::API2:PDF作成モジュール

プログラム

#
#機能:
# PDFファイルに任意の文字列挿入
#
#INPUT:
# 1.pdf:文字列を挿入するPDF
# text.txt:挿入する文字列ファイル(UTF8ファイル)
#
#OUTPUT:
# addtext.pdf:文字列挿入後のPDF
#

use strict;
use warnings;
use PDF::API2;#cpan install
use CAM::PDF;#cpan install
use Encode;

#テンポラリファイル
my $tmpfile="tmp.pdf";
#
#PDFバージョン変換
#

# 結合するPDFのファイル名を指定してインスタンス生成
my $pdf1 = CAM::PDF->new('1.pdf');

# 結合したPDFを出力するファイル名を指定
$pdf1->cleanoutput($tmpfile);
 
# 結合したPDFを出力
$pdf1->toPDF();

#
#テキスト追加
#

my $pdf = PDF::API2->open($tmpfile);
my $page = $pdf->openpage('1');

#フォントオブジェクトを生成
my $font = $pdf->cjkfont("KozGo");

#テキストオブジェクト?を生成
my $text = $page->text();
#テキストの位置を設定
$text->translate(50, 800);
#フォントとサイズを設定
$text->font($font, 15);
#フォントカラーを設定
$text->fillcolor('#FF0000');

#文字列設定
my $string;

#挿入テキスト読み込み
open(IN,"text.txt");
while(<IN>){
	
	#UTF-8フラグを立てておく
	$string = Encode::decode("UTF-8", $_);

	#テキストを描写
	$text->text($string);

	#行の高さを指定して改行(y座標が下から上なので、マイナス値にする!)
    $text->cr(-15);
}
close(IN);

#ファイル保存
$pdf->saveas("addtext.pdf");

解説

プログラムの流れはPDFファイルを読み込んで、テキストファイルの内容をPDFに書き込んでいるだけの簡単プログラム

最初はPerlのPDFモジュールのPDF::API2のみだけで、やろうとしたけど、PDFのバージョンによっては、読み込めないケースも判明しました
エラーの意味が初め、わからなかった

そのため、別のPDFモジュールのCAM::PDFも利用して、バージョンコンバートをかけて保存し、保存したPDFファイルに対して操作するようにしています

まとめ

直接解決するサイトは見つからなかったけど、簡単でした
まあ、プログラムのつなげ合わせなんだけどね

参考サイト

Perl で PDF生成(PDF::API2)|カタテマ|ウェブマーケティングの株式会社オーク

固定書式なら、perlによるPDF生成はPDF::API2がいいかも – end0tknrのkipple – web写経開発

Perl – CAM::PDFで複数のPDFを結合する – Qiita [キータ]

フォントの色で PDF::API2 Perl モジュールの設定方法

PC

関連記事

未来がやってきた!ソフバンのpepperを見に銀座まで行ってきたの巻、そして考えたの巻

はじめに ソフバンがロボット販売を発表しました Pepper(ペッパー)登場 | 特集 |

記事を読む

Zeam Launcherでプリンストールのアプリは消せなかったの巻

残念ながら、Zeam Launcherでプリンストールのアプリは消せませんでした 某所

記事を読む

AviUtlを利用して動画作成、Youtubeに投稿したの巻

はじめに AviUtlを使って動画作成が簡単だったので、その内容となります 作成動画

記事を読む

実録!リアルタイム!AliExpressで帽子が発送されたの巻き

はじめに AliExpressで注文した帽子が発送されたようです 目的 AliExpres

記事を読む

収穫したプチトマトは甘かった!今週のプチトマトとキュウリ 永田農法

今週のできごと お弁当に投入です  ノンカーボダイエット中なので、たんぱく質中心です

記事を読む

今回もお得にお買い物! 2016年春夏 第74回岩本町・東神田ファミリーバザールに行ってきて戦利品公開の巻

はじめに 今年も岩本町のファミリーバザールの季節となりました 例年楽しみにしています 早速

記事を読む

Web × モノ × くらしを見に行ってきたの巻 Mozilla Open Web Day in Tokyo 秋葉原

これはアンケート結果の御礼に頂いたクッキーです はじめに 久しぶりの更新です 仕事の関係で

記事を読む

月曜日は要注意! 日帰り1day大阪 JR東海ツアーズ

のぞみ品川発に乗ろうとすると始発で出発でした 日帰り1day大阪に乗車です 前回、利

記事を読む

断捨離で不要になったスキャナをソフマップに売りに行ったの巻

結論から言うと、売れませんでした、残念 この連休は部屋のプチ断捨離中 そんでもって、

記事を読む

でっかいけど便利! 大型断裁機 ペーパーカッター YG-LN BA58A4 開封の儀

はじめに 本が多くなり、整理しなければならなくなったので、遅ればせながら、断裁機を買いました

記事を読む

PC

PC

PAGE TOP ↑