C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: vb.netからpdfの呼び出し


(過去ログ 123 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■73333 / inTopicNo.1)  vb.netからpdfの呼び出し
  
□投稿者/ イソジン (1回)-(2014/09/13(Sat) 11:13:28)

分類:[VB.NET/VB2005 以降] 

「customerID」というテキストフィールドを持つpdfフォームがあるのですが、
vb.netからこのフィールドに値を設定してpdfファイルを開く、というようなことはできないでしょうか?

コマンドラインから引数渡しで実行できそうな気もするし、APIが用意されててもおかしくないような気がするのですが、
それらしい情報を見つけられずに困ってます。
どなたかご存知のかたいらっしゃいましたらご教示願います。
引用返信 編集キー/
■73341 / inTopicNo.2)  Re[1]: vb.netからpdfの呼び出し
□投稿者/ もりお (24回)-(2014/09/14(Sun) 12:49:56)
No73333 (イソジン さん) に返信

Adobe Readerの引数では設定できなさそうですね。

iTextSharpというライブラリを使えばフォームに値を入れられるみたいですが、
別ファイルに保存してそれを開く必要があります。ちょっと面倒です。
引用返信 編集キー/
■73342 / inTopicNo.3)  Re[2]: vb.netからpdfの呼び出し
□投稿者/ イソジン (2回)-(2014/09/14(Sun) 15:46:26)
No73341 (もりお さん) に返信

ありがとうございます。

簡単にできるだろ、と高をくくっていたのに結構敷居が高そうですね。

とはいえ、いただいたヒントでなんとなく光明が見えてきた気がします。
下記を参考にちょっといろいろ試してみます。
http://dream.mods.jp/itext/form.pdf


引用返信 編集キー/
■73343 / inTopicNo.4)  Re[3]: vb.netからpdfの呼び出し
□投稿者/ イソジン (3回)-(2014/09/15(Mon) 13:36:32)
経過報告&新たに質問です。

下記コードを実装し、customerIDを無事に設定することが出来ました。
が、新たな問題が。customerNameがなんかうまく設定できないのです。

症状としては、実行結果は正常終了。
完了後にtmp.pdfを開くとcustomerIDは正しく表示されていて問題ないのですが、
customerNameは何も表示されていない状態です。
ただし、customerNameのフィールドにカーソルを当てると"イソジン"と表示され、
カーソルを外すとまた非表示になってしまう、というよくわからない状態です。
日本語を取り扱う場合になんか特別な制御が必要なのでしょうか?


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        '"C:\tmp\sample.pdf"

        Dim reader As PdfReader = New PdfReader("C:\tmp\sample.pdf")
        Dim stamper As PdfStamper = New PdfStamper(reader,
                                                   New System.IO.FileStream("C:\tmp\tmp.pdf", System.IO.FileMode.Create))
        Dim form As AcroFields = stamper.AcroFields

        form.SetField("customerID", "123")
        form.SetField("customerName", "イソジン")

        stamper.Close()

    End Sub



ちなみに何パターンか試したところ以下のように半角英数の場合のみうまくいってるようです。
123→123
AAA→AAA
イソジン→非表示
イソジン→非表示
アアア123イイイ456→123456
いずれの場合もカーソルを当てると設定した文字が正しく表示されます。


引用返信 編集キー/
■73347 / inTopicNo.5)  Re[4]: vb.netからpdfの呼び出し
□投稿者/ もりお (25回)-(2014/09/15(Mon) 18:41:58)
2014/09/15(Mon) 18:49:37 編集(投稿者)
No73343 (イソジン さん) に返信

私もPDFの仕組みをよくわかっていませんが、日本語のグリフがないからでしょうかね。

PDFにグリフがないときはこのフォントのグリフを使ってくださいよーというメソッドがありますので、
フォームに値を設定する前にそれを呼んでみてはいかがでしょうか。

こんな感じです。

Dim font As iTextSharp.text.pdf.BaseFont = iTextSharp.text.pdf.BaseFont.CreateFont(
	"C:\Windows\Fonts\msmincho.ttc,0",
	iTextSharp.text.pdf.BaseFont.IDENTITY_H,
	True)
form.AddSubstitutionFont(font)

form.SetField("customerID", "123")
form.SetField("customerName", "イソジン")

引用返信 編集キー/
■73367 / inTopicNo.6)  Re[5]: vb.netからpdfの呼び出し
□投稿者/ イソジン (4回)-(2014/09/17(Wed) 10:48:45)
No73347 (もりお さん) に返信

ありがとうございます!
ご教示いただいたコードを加筆することで無事に日本語の出力ができるようになりました。

正直理屈がイマイチわかっていませんが、itextのデフォルトのフォントが日本語に対応していないために
このような現象になっていたということなのでしょうか???
だけど各所にあるサンプルではフォントタイプの指定とかせずに日本語出力ができてるようで
若干腑に落ちないけど、気にしないことにします(汗
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -