DOBON.NET DOBON.NETプログラミング掲示板過去ログ

itextsharpの印刷プレビューの向き設定

環境/言語:[ASP.NET(VB.NET)]
分類:[ASP.NET]

はじめまして。

いつも拝見させていただいてます。

早速ですが、itextsharp にてASP.NET(VB.NET)にてPDFを作成しています。

生成したPDFを開くと出力の向きをA4.rotateで横向きにしているので、横向きに表示されるのですが、そこから印刷ダイアログを開くと縦設定でプレビューが開いてしまいます。(縦の中に生成したA4横の印刷物を縮小して表示)

何かプロパティで設定できるのでしょうか?

ご教授お願いいたします。

■No26402に返信(ゆきさんの記事)

> 何かプロパティで設定できるのでしょうか?

プリンターのプロパティで印刷の向きを横にしてはいかがでしょうか。
もりおさん

返信ありがとうございます。

> プリンターのプロパティで印刷の向きを横にしてはいかがでしょうか。

→プログラム側でプリンターの向きを変更するということでしょうか?
 もしくはユーザー側で印刷プロパティを気にしないといけないのでしょうか?

itextSharpかdocumentのプロパティで作成するPDFの向きではなくて(A4.rotate)、PDF自体が持つ「印刷の向き」のようなプロパティがあればと思ったのですが見当たらないですね。。。。
■No26406に返信(ゆきさんの記事)

> →プログラム側でプリンターの向きを変更するということでしょうか?
>  もしくはユーザー側で印刷プロパティを気にしないといけないのでしょうか?

ユーザー側で印刷の向きを変えるという意味で書きました。
ゆきさんの期待されているものとは少し違ったみたいです。

> itextSharpかdocumentのプロパティで作成するPDFの向きではなくて(A4.rotate)、PDF
> 自体が持つ「印刷の向き」のようなプロパティがあればと思ったのですが見当たらない
> ですね。。。。

Adobe Reader 9 にて印刷ダイアログを表示するとページ処理の欄に PDF のページサイズ
に合わせて用紙を選択というチェックボックスがあります。これをデフォルトでチェック
状態にしてみてはいかがでしょうか。

Dim writer As PdfWriter = PdfWriter.GetInstance(document, New FileStream(FilePath_, FileMode.Create))
writer.AddViewerPreference(PdfName.PICKTRAYBYPDFSIZE, PdfBoolean.PDFTRUE)

ただし、PickTrayByPDFSize は PDF1.7 から導入されたオプションのようで
Adobe Reader 8 以前のバージョンでは対応していない可能性があります。
PDF-XChange Viewer では未対応でした。
もりおさん

返信ありがとうございます


> Adobe Reader 9 にて印刷ダイアログを表示するとページ処理の欄に PDF のページサイズ
> に合わせて用紙を選択というチェックボックスがあります。これをデフォルトでチェック
> 状態にしてみてはいかがでしょうか。
>
> Dim writer As PdfWriter = PdfWriter.GetInstance(document, New FileStream(FilePath_, FileMode.Create))
> writer.AddViewerPreference(PdfName.PICKTRAYBYPDFSIZE, PdfBoolean.PDFTRUE)
>
> ただし、PickTrayByPDFSize は PDF1.7 から導入されたオプションのようで
> Adobe Reader 8 以前のバージョンでは対応していない可能性があります。
> PDF-XChange Viewer では未対応でした。
>


すごいです!
したかったのはこれです!

ちなみに自動回転のチェックもあるのでしょうか?
writer.Add〜系ではないように見受けれたので。

追加質問で申し訳ありません。
■No26412に返信(ゆきさんの記事)
> ちなみに自動回転のチェックもあるのでしょうか?
> writer.Add〜系ではないように見受けれたので。

私も見つけることが出来ませんでした。

JavaScript で suppressRotate フラグと suppressCenter フラグを外して
印刷するという方法はあるようです。
ただし、印刷ダイアログが自動的に表示されてしまいます。

Dim document As New Document()
Dim writer As PdfWriter = PdfWriter.GetInstance(...)

document.Open()
writer.AddJavaScript(GetAutoRotateAndCenterAction(writer))
...

Function GetAutoRotateAndCenterAction(ByVal writer As PdfWriter) As PdfAction
    Return PdfAction.JavaScript(GetAutoRotateAndCenterScript(), writer)
End Function

Function GetAutoRotateAndCenterScript() As String
    Dim buffer As New System.Text.StringBuilder()
    buffer.AppendLine("var pp = this.getPrintParams();")
    buffer.AppendLine("var fv = pp.constants.flagValues;")
    buffer.AppendLine("pp.flags &= ~(fv.suppressRotate | fv.suppressCenter);")
    buffer.AppendLine("this.print(pp);")
    Return buffer.ToString()
End Function

DOBON.NET | プログラミング道 | プログラミング掲示板