質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

7351閲覧

PDFファイルのbinary化+binary化から復元

sobue

総合スコア329

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/08/22 03:36

編集2021/08/22 03:37

VBA

1 Dim pdf_file_path As String 2 pdf_file_path = "C:\test2.jpg" 3 4 Dim pdf_size As Long 5 pdf_size = FileLen(pdf_file_path) 6 7 '空いているファイル番号を取得 8 Dim file_number As Integer 9 file_number = FreeFile 10 11 '指定されたファイルを取得したファイル番号としてバイナリモードで開く 12 Open pdf_file_path For Binary As #file_number 13 14 'ファイルサイズ分のバイト配列を用意 15 Dim pdf_binary_data() As Byte 16 ReDim pdf_binary_data(0 To pdf_size - 1) 17 18 'バイト配列に指定ファイルを展開 19 Get #file_number, , pdf_binary_data 20 Close #file_number 21 22 Dim outputFileName As String 23 outputFileName ="C:\test2.jpg" 24 25 26 '空いているファイル番号 27 file_number = FreeFile 28 29 Dim i As Long 30 'バイナリファイル書き込み 31 Open outputFileName For Binary As #file_number 32 For i = 0 To UBound(pdf_binary_data) - 1 33 'ファイルにByteを書き込み 34 Put #file_number, , pdf_binary_data(i) 35 Next 36 Close #file_number 37

上記のソースでは、画像ファイルをbinary化し、ファイルを復元しています。

同じファイルなので、画像ファイルパスのところにPDFにしてみましたが、うまくファイルを復元することができません。
PDFのbinary化と復元方法をご教示いただけないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

For i = 0 To UBound(pdf_binary_data) - 1
のところが

For i = 0 To pdf_size - 1
または
For i = LBound(pdf_binary_data) To UBound(pdf_binary_data)
だと思われます。

ファイルサイズを確認されれば、1バイト小さくなっているはずです。

参考までに配列をLOOPさせずに

vb

1'バイナリファイル書き込み 2Open outputFileName For Binary As #file_number 3 Put #file_number, , pdf_binary_data 4Close #file_number

と簡潔に記述できます。

投稿2021/08/22 04:45

takanaweb5

総合スコア359

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sobue

2021/08/23 02:12

'空いているファイル番号 file_number = FreeFile Dim i As Long 'バイナリファイル書き込み Open outputFileName For Binary As #file_number For i = 0 To UBound(pdf_binary_data) 'ファイルにByteを書き込み Put #file_number, , pdf_binary_data(i) Next Close #file_number --------------------------------------------------------------- Open outputFileName For Binary As #file_number Put #file_number, , pdf_binary_data Close #file_number --------------------------------------------------------------- 教えていただいたコードではPDFは復元できませんでした。 pngはできるのですが、何故かPDFはできません。
takanaweb5

2021/08/23 02:27

修正前のコードでは1バイト少なくなっているのを確認しましたか? また修正後のコードでファイルサイズが元のファイルと同じになっていることを確認しましたか?
sobue

2021/08/23 02:37

はい、ファイルサイズが変わっていることは確認しました。 pngは変更されていましたが、どちらもファイルを開くことができました。 PDFはどちらもファイルを開くことができません。
sobue

2021/08/23 04:40

ReDim pdf_binary_data(0 To pdf_size - 1) ↓ ReDim pdf_binary_data(0 To pdf_size) で解決しました。 ヒントをありがとうございます。
guest

0

あなたのいうbinary化ってのは、たんにバイト配列にファイルを読み込んでいるだけ、です。
元ファイルが画像だろうとPDFだろうとそれは変わりません。
で、それで書き戻したときにうまく復元できないってのは、あなたのコードがうまく動いていないため、正常に書き込みできない、あるいは正常に読み込みができていないってことです。

まずは、元ファイルと書き出したファイル、双方のデータを比較し、どこがどういうふうに変わっているのかを調べましょう。
はなしはそれから、となります。

投稿2021/08/22 04:12

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問