*

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

関連記事

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

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

記事を読む

早い! 車検証と車検を入手 車検のコバック

やってきました、車検証 車検のコバックで先日、検査を受けました 無事通過で、あとは車検が

記事を読む

キュウリ1苗を植え替えた!今週のプチトマトとキュウリ 永田農法

今週のできごと その1 プチトマトを収穫 今回は種類を変えて2個 完熟したも

記事を読む

帰省したには帰らなきゃいけない! 浜松→東京 青春18きっぷ その4

電車に乗っている時間間隔が麻痺していますw 帰省したには、帰らなければいけません 一

記事を読む

岩本町・東神田バザールの追加戦利品報告!第73回岩本町・東神田バザールで買ってきたの巻

はじめに 岩本町・東神田バザールは先週行ったのですが、追加で買い物をしてきました 定番のワイ

記事を読む

【公開】出店に異変!貝印さんがいない!そして戦利品公開!第77回ファミリーバザール冬の陣 岩本町

【はじめに】 今年も行ってきました第77回ファミリーバザール 衣料品がお安いんですよね

記事を読む

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

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

記事を読む

手続き簡単! UQ WiMAXで機器追加を解除してみたの巻

UQ WiMAXの機器追加の解除は簡単です 新しいWiMAXのモバイルルータAterm

記事を読む

エクスプロージョン 100%ナチュラルホエイプロテイン【プレーン味3kg】を買ったらデカかったの巻

商品名 エクスプロージョン 100%ナチュラルホエイプロテイン【プレーン味3kg】 一言

記事を読む

WordPressのLightBoxが、おかしくなったので直してみたの巻

どうも一時期、プラグインのアップデートでプラグイン同士の齟齬が発生したようです ちょっ

記事を読む

PC

PC

PAGE TOP ↑