*

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

関連記事

リーガルの靴を修理に出してきたの巻 リーガル日本橋店

はじめに リーガルのかかとが壊れちゃったので修理に出してきました 流れ 修理する靴を店舗に

記事を読む

Todo Backup FreeとPartition Master FreeでWindows7のSSDを別のSSDにシステムコピーしたの巻

はじめに Let's noteにWindwos10をインストールしてみます 既存のWindow7

記事を読む

初めての販売! 本の断捨離 18冊を売ってきた! BOOKOFF 木場葛西橋通り店

ブックオフに18冊売って220円でした 夏休みに部屋の整理は続きます 今日は本の

記事を読む

やってきまっした、見積もり 車検のコバック

昨日頼んだ、車検の見積もりFAXが11時ごろ来ました 内容は、といっても、チラシの書き

記事を読む

プリントグラデーションの背景紙を使うとオークションのために写真が美しく撮れるの巻

一言 写真撮影の際、プリントグラデーションの背景紙を使うと、背景に日常生活が映りこまず、美しい

記事を読む

【青春18きっぷ:2018年夏その1】座っていく東京→浜松の帰省ツアー

一言 始発が出る駅で乗り換えると座っていけます はじめに 今回、青春18きっぷで浜松まで帰

記事を読む

楽天オークションでiPhone4を買ってみたの巻【落札編】

はじめに この冬休みにiPhone4を楽天オークションで買いました P-01Dも壊れてしまっ

記事を読む

デイリーポータルZの肉まつり@お台場に入ってきたの巻

会場は混雑していました よく見るサイトにデイリーポータルZがあります 面白いんですよ

記事を読む

爆安!第73回2015年冬 岩本町・東神田ファミリーバザールに参戦して来たの巻

はじめに 今年も岩本町で行われるファミリーバザールに行ってきました お天気が良くてよかった

記事を読む

予約しました! 車検のコバック

FAXで送られた見積もりが郵送されてきました 2/14 平日は時間がなく、電話できず、

記事を読む

PC

PC

PAGE TOP ↑