*

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

関連記事

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

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

記事を読む

キュウリの植替え成功!無事に生育中!今週のプチトマトとキュウリ 永田農法

今週のできごと 今週はプチトマトを収穫しました 丸くて小さい1個だけだけど、甘くて美

記事を読む

突然やってきた! 今なら1,000ポイントプレゼント! 楽天マート

楽天マートって生協の宅配システムと同じです 突然やってきましたw 楽天マートのカタロ

記事を読む

【公開】2018年春も安定の混雑!リーズナブルな服や靴、鞄!そして戦利品公開!第78回ファミリーバザール

【はじめに】 今年も行ってきました、岩本町東神田ファミリーバザール 相変わらず混んでいま

記事を読む

6年経過でも劣化なし! 自作ホットイナズマ

車検の続きです 実は自作のホットイナズマをバッテリに装着しているのです このホットイナズ

記事を読む

マラニック開始!山手線一周ラン!東京駅から上野駅まで3.75kmを走ったの巻

はじめに この連休に山手線一周ランを計画しました 約40キロのランとなります 私の実力では一日

記事を読む

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

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

記事を読む

これも便利!添付ファイル付き返信メールをマクロ(VBA)で作成するの巻

はじめに VBAで添付ファイル付きの返信メールを作成しようとしたところ、一発では作れませんでし

記事を読む

今週はネットを張った!今週のプチトマトときゅうり 永田農法

今週の出来事 きゅうりが大きくなってきたので、ネットを張りました これで生育に加速が付くと良

記事を読む

【公開】ファミリーバザール2016年冬の陣!衣料、日用雑貨がリーズナブル!第75回岩本町・東神田ファミリーバザールで買ってきたの巻

はじめに 今回も2016/11/25~11/27に開催された第75回岩本町・東神田ファミリ

記事を読む

PC

PC

PAGE TOP ↑