質問

複数のページでWPFキャンバスを印刷しようとしています。

ページ幅に合うようにスケーリングしてから、各ページのキャンバスをクリップして翻訳することに完全に満足しています。すべての非常にシンプルな数学。

私が理解していないのは、印刷可能な領域の寸法をどのように取得するか、そしてプリンターにどこに印刷するかを伝える方法です。私が試してみたものは何でも、私が使用している値は紙のサイズであるように見えるので、プリンターが紙の端に正しく印刷できないので、私はトリミングが発生します。

var capabilities = printDialog.GetPrintCapabilities(dialog.PrintTicket);

機能には次のプロパティがあります。

capabilities.PageImageableArea.ExtentWidth
// "Gets the width of the imageable area"

「画像可能な」エリアは何ですか?それは私がコンテンツを入れることができる紙の領域ですか?私はそうだと思います:

capabilities.PageImageableArea.OriginWidth
// Gets the distance from the left edge of the page to the imageable area.

しかし、底部と右のマージンはどうですか?この情報はどこにありますか?

何がすべきか PageSize のプロパティ DocumentPaginator に設定されますか?これを設定する必要があります capabilities.PageImageableArea?またはそれをします dialog.Print() 関数を設定すると、私はそれから読む必要があります GetPage()?

最後に、私が返すとき DocumentPage, 、3つのジオメトリの引数に何を渡すことができますか pageSize, bleedBoxcontentBox?

ありがとう :)

役に立ちましたか?

解決

OK、印刷は常に発生しているようです (0, 0) 紙の(左上)。

紙のサイズを取得します:

printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight

そして、上部と左のマージン:

var printCapabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);
printCapabilities.PageImageableArea.OriginWidth, printCapabilities.PageImageableArea.OriginHeight

私は、底部と右のマージンが上部と左と同じであると仮定しましたが、これは安全ではないかもしれません。

通常のようにキャンバスをスケーリングしてクリップする必要があります。 TranslateTransform コンテンツを印刷可能な領域に移動するためのマージンのサイズ。

他のヒント

キャンバスを印刷するだけでなく、フロードキュメントを使用することを見ましたか?作成と印刷の良い例があります ここ.

うまくいけば、それが多くの数学の必要性を否定するでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top