Susie64 PDFファイル Plug-in『axpdf』2023年11月08日 15:44

PDFファイルからビットマップ画像を抽出するSusie 64bit Plug-inです。

ダウンロードはこちら。

コメント

_ o ― 2023年11月08日 17:17

お世話になってます
>■必要ファイル
>・pdfium.dll
ググってもよくわからず見つからないので
入手先を教えてもらえないでしょうか

_ KrK ― 2023年11月08日 21:48

質問ありがとうございます。
https://github.com/bblanchon/pdfium-binaries
で右の「Release」の「Latest」をクリックして、
「pdfium-win-x64.tgz」を落としてもらえれば。
GitHubなので安全だとは思いますが、自己責任でお願いします。
よろしくお願いします。

_ o ― 2023年11月09日 15:22

回答ありがとうございます
無事pdfium.dll入手出来
使ってるファイラーでも動作しました

>32bit版は存在しません。
同名で
axpdf.spiは他の方が出されてるので紛らわしいかもしれませんね
Vectorの新着ソフトでaxpdfを見かけたとき最初この方のかと思いました

_ KrK ― 2023年11月09日 20:04

確認ありがとうございます。
>紛らわしいかもしれませんね
んー、確かに紛らわしいかもしれません…。
でも他に名前も思いつかいので、せめて、と
ソフト名を「axpdf」から「axpdf.sph」に変えました。
※多分変わるのは来週の水曜日です。
ご指摘ありがとうございます。

_ TORO ― 2023年11月19日 12:46

axpdf.sph と axmp3.sph を使用させて頂いたところ、
挙動がおかしいようでしたので報告させて頂きます。

(1) GetArchiveInfo の結果と、GetArchiveInfoW の結果を比べると、
GetArchiveInfoW で得られるファイルの数が常に1つのみで、
ファイル名が空の状態になっていました。

(2) 取得できる画像の BITMAPINFOHEADER の biSizeImage の値が、
ビットマップのサイズに加えて BITMAPINFOHEADER と
BITMAPFILEHEADER のサイズも加えた値になっていました。

_ KrK ― 2023年11月25日 16:15

>TORO様
確認ありがとうございます。
予防接種で寝込んでおりまして、返信が遅れました。

axpdf.sphについては直ったと「思います」。
なにせ素人プログラマーな上、難しいことは分からず、自信がありません。
特にbiSizeImageに関しては、完全に私の仕様勘違いから来ています。

axmp3.sphについては、
(1)axmp3.sphはそもそも表紙しか取らないので、常にファイル数1です。
また、拙作ViWWで画像が表示されることを確認しました。
(2)axmp3.sphはBMPではなくJPEGを取得していますので、
biSizeImageは関係ないかと思われます。

Vectorには水曜日にしか登録されないので、
とりあえず私のホームページの方に上げました。

できましたら、確認をしていただけると助かります。

よろしくお願いします。

_ kiyohiro ― 2023年11月28日 05:33

間違ってたらすいません
axpdf v1.1を試しましたが
TORO氏のPaper Plane xUI 1.94では
>・Susie Plug-in で UNICODE版 API を使用しない設定を追加(P_susie,B4)
でないと画像が見れないので
>(1) GetArchiveInfo の結果と、GetArchiveInfoW の結果を比べると、
>GetArchiveInfoW で得られるファイルの数が常に1つのみで、
>ファイル名が空の状態になっていました。
>axpdf.sphについては直ったと「思います」。
これどうなんでしょう

_ KrK ― 2023年11月28日 14:51

確認ありがとうございます。
axpdfでは、GetArchiveInfoW内で
filenameをWCHAR→CHAR変換して、
GetArchiveInfoを呼んでいるだけですので、
GetArchiveInfoWだけ読み込めない理由が分かりません。

GetArchiveInfoW内で
MessageBoxA(NULL, pInfo->filename, "test", MB_OK);
にて、ファイル名が取れていることを確認できています。

一つ考えられるとすると、ファイル名にUnicode文字列が
含まれていることですが…。

…あれ?もしかしてW系ではfileInfo構造体の中身も
WCHARにしなくてはいけないんですかね?
SPHの「仕様書」が存在しないため、
その辺が分からないんですよね…。

よろしくお願いします。

_ TORO ― 2023年11月29日 23:40

GetArchiveInfoW では、次の SUSIE_FINFOW を使います。
ファイル名やサイズなどが変更されています。

typedef ULONG_PTR susie_time_t;

typedef struct {
unsigned char method[8]; // 圧縮法の種類
ULONG_PTR position; // ファイル上での位置
ULONG_PTR compsize; // 圧縮されたサイズ
ULONG_PTR filesize; // 元のファイルサイズ
susie_time_t timestamp; // ファイルの更新日時
WCHAR path[200]; // 相対パス
WCHAR filename[200]; // ファイルネーム
unsigned long crc; // CRC
#ifdef _WIN64
// 64bit版の構造体サイズは844bytesですが、実際のサイズは
// アラインメントにより848bytesになります。環境によりdummyが必要です。
char dummy[4];
#endif
} SUSIE_FINFOW;
#pragma pack(pop)

SPH の仕様書はきちんとしたものはなくて、拙作各種Plugin内の
ドキュメントにある各種定義とソースを見てもらう形になります。
もともと自分用に拡張した内容でしたので。

同様に、UNICODE版 API も別の方が独自に拡張したものを
使わせてもらっています。

_ KrK ― 2023年11月30日 19:44

>TORO様
情報提供ありがとうございます。
SUSIE_FINFOWを導入して、
GetArchiveInfoW
GetFileInfoW
GetFileW
GetPluginInfoW
IsSupportedW
と、すべてW系にしてみましたが、やはりPPxでは表示できませんでした。

TORO様のホームページにあるAM00系のソースを拝見したところ、
W系をすべて搭載はしていないように見受けられますが、
もしかして全部W系にしてはいけないのでしょうか?

もしくは非W系は非W系で搭載していないといけないものでしょうか?

ご教授願います。

■追伸
違ったら失礼かと思って聞かなかったのですが、
SPH制定者のTORO様でしたか。
PPx普段使いさせていただいています!

_ TORO ― 2023年12月01日 23:24

なかなかうまくいかないですね。構造体のテストコードを用意してみたので、
これにSUSIE_FINFOWを渡して数値が括弧内の値と合っているかと、
"filename:"にファイル名が表示されているかを確認してみてください。

また、LocalAlloc の確保サイズ(848の倍数)も確認してみてください。

数値(特にfilename offset の値)が違っている場合は、
多分アラインメントがおかしいと思われます。
#pragma pack(push, 1) / #pragma pack(pop) 等で調整してください。

void TestFinfoW(SUSIE_FINFOW *data)
{
WCHAR buf[1000];
wsprintfW(buf, L"SUSIE_FINFOW size(848): %d\nfilename offset(440): %d\npath: %s\nfilename: %s",
sizeof(SUSIE_FINFOW),
(char *)data->filename - (char *)data,
data->path,
(WCHAR *)(char *)((char *)data + 440));
MessageBoxW(NULL, buf, NULL, MB_OK);
}

あと、PPxの実装では、W系が使えるときはW系を使う判断をAPI別に
行っているため、一部のW系がなくても動作するようになっています。
今回の一覧表示については、GetFileinfoWだけあれば動作します。

> ■追伸
ご利用ありがとうございます!

_ KrK ― 2023年12月02日 21:37

>TORO様。
一応できました!
https://www.ne.jp/asahi/krk/kct/software/axpdf.htm
→axpdf v1.2 ダウンロード

ファイル名は取れていたのですが、
どうしてもPPxで読み込んでくれなくて困っていたのですが、
「GetPluginInfoW」と搭載せず、
UNICODE版でも「GetPluginInfo」にしたら読み込んでくれました。

…って、これで対応方法はあっていますでしょうか?

UNICODE版でも「GetPluginInfo」は
マルチバイト(CHAR)で処理しています。
※ワイド(WCHAR)にしたら「SPI error」が表示されました。

よろしくお願いします。

_ TORO ― 2023年12月03日 22:50

axpdf / axpdfw のどちらでも動作するのを確認しました。
ありがとうございます。

GetPluginInfoW は、PPx では使っていません。しかし、他の方が使われることを
考えると GetPluginInfo / GetPluginInfoW の両方が使えたほうがよいと
思います。他の API も同様です。

_ KrK ― 2023年12月04日 16:36

>TORO様
確認ありがとうございます。

W系と非W系を両方一つのファイルに入れる方法が分からなくて、
#ifdef UNICODE
でW系と非W系を分岐するという方法を取りました。

W系と非W系を両立させるには、
単純に同じアルゴリズムの関数を2つ作るんでしょうか?

良い案があれば、ご教授願います。

よろしくお願いします。

_ TORO ― 2023年12月05日 23:11

自分では 非W版 APIを、内部で W版 APIを読んで文字コード変換する形で
書いています。
Extend convert Susie Plug-in の axextend.cpp と coextend.cpp を
参照してください。また、変換部分のコードは、使い回してもらっても
構いません。

尚、同じ内容をテンプレートで書いてもいいとおもいます。

_ KrK ― 2023年12月06日 10:19

>TORO様
ご教授ありがとうございます。

ソースを読ませてもらいました。
私、人のソースを読むのが苦手なのですが…。
「W系も非W系もSUSIE_FINFOWを取得して、
非W系はSUSIE_FINFOに変換している」
という理解であっていますでしょうか?

よろしくお願いします。

_ TORO ― 2023年12月07日 22:52

その内容で合ってます。あくまでも一例ですので参考程度にしてください。

_ KrK ― 2023年12月08日 06:16

>TORO様
返信(情報提供)ありがとうございます。
時間があるときに実装したいと思います。
よろしくお願いします。

_ kiyohiro ― 2024年02月20日 11:05

どうもお世話になってます
axpdf.sphを使えないか相談してた
画像ビューアの作者さんから以下の返信がありました
https://imgur.com/AGnwwNs
対応可能でしょうか
よろしくお願いします

_ KrK ― 2024年02月20日 18:51

>kiyohiro様
ホームページにv1.4を上げました。
「.pdf」は単純なミスです。
長さはどちらが正解かよく分からないですね…。
よろしくお願いします。

_ kiyohiro ― 2024年02月21日 06:40

修正ありがとうございます
v1.4
画像ビューアで使えるようになりました

_ O ― 2024年02月27日 17:40

KrKさまへ
複数ページpdfがv1.4で一枚しか表示出来ないので
問い合わすとソフト側で対応していただけました

参考までに問い合わせの解答です
確認したのですが、ファイル取得時の処理が変わっているため、v1.4を使うと、1枚のみになります。
v1.3の場合、UNICODEのSusiePluginの関数を取得すると、ファイル数が0個
v1.4の場合、UNICODEのSusiePluginの関数を取得すると、ファイル数が1個
となります。
0個の場合MBSの関数で取得し直すのですが1個の場合、取り直さないため、画像が1しか表示されなくなります。
axpdf.sphどちらの仕様でも対応するのは不可能なので、axpdf.sphの場合にはMBSのSusiePluginを必ず使うようにします。
他のソフトは、必ずMBSのSusiePluginを使っていると思われます。
変更も難しくはないので、すぐに修正します。

_ KrK ― 2024年02月28日 22:12

>O様
大変申し訳ございませんが、こちらでは再現しませんでした。
ViW64では複数ページ表示されます。
UNICODE命令が反応していることも確かめました。

なお、「ファイル数が1個」と回答いただいたようですが、
細かいことを書くと長くなるので簡単に書きますが、
SusiePluginには「ファイル数を取得する」という命令は存在しません。

よって、ビュアーが実際どの様な動きをしているか分かりません。

よろしくお願いします。

_ o ― 2024年02月29日 06:51

KrKさまへご回答ありがとうございます
ViW64では複数ページpdfも全ページ表示出来てますが
DoubleWindowで1枚しか表示出来ませんでした
DWのバージョンアップして旧バージョンが無いので再確認出来ないですが
ソフトは(http://www.st.sakura.ne.jp/~higashi/)
問い合わせはDW掲示板の件名Susie Pluginです

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
このblogのタイトルの頭3文字を半角で入力してください。

コメント:

トラックバック

このエントリのトラックバックURL: http://krk.asablo.jp/blog/2023/11/08/9632448/tb

アクセスカウンター

最近のコメント

最近のトラックバック

RSS