0

.NET 3.5 で作業しています。

概要:

Windows 7 で壊れる既存のサード パーティ製コンポーネントの機能を複製しようとしています。これまで、ユーザーは印刷する画像ファイルの束を選択し、各画像のページ サイズを指定してから、一度に送信してすべてを印刷することができました。各ページを印刷するときにその場でページサイズを切り替えて印刷する方法の概念的な説明が必要です。

詳細

これまでのところ、複数の画像をすべて同じページサイズで印刷する方法を見つけました。画像のリストを使用し、PrintDocumentオブジェクトを使用して、リストの最後に到達するまでのHasMorePagesプロパティPrintPageEventArgsを true に設定します。

これをテストするためにすぐにまとめたクラスを次に示します。

public partial class Form1 : Form
{
    private List<Image> images { get; set; }

    private PrintDocument printDocument { get; set; }

    public Form1()
    {
        InitializeComponent();

        this.images = new List<Image>();
        this.images.Add(Image.FromFile(@"C:\test60.bmp"));
        this.images.Add(Image.FromFile(@"C:\SuperLargeTest.jpg"));

        this.printDocument = new PrintDocument()
        {
            PrinterSettings = new PrinterSettings()
        };
        this.printDocument.PrintPage += printDocument_PrintPage;
    }

    private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
    {
        Graphics g = e.Graphics;

        e.PageSettings.PaperSize = this.paperSizes[this.currentImageIndex];

        RectangleF marginBounds = e.MarginBounds;
        RectangleF printableArea = e.PageSettings.PrintableArea;

        int availableWidth = (int)Math.Floor(printDocument.OriginAtMargins ? marginBounds.Width : (e.PageSettings.Landscape ? printableArea.Height : printableArea.Width));
        int availableHeight = (int)Math.Floor(printDocument.OriginAtMargins ? marginBounds.Height : (e.PageSettings.Landscape ? printableArea.Width : printableArea.Height));
        g.DrawRectangle(Pens.Red, 0, 0, availableWidth - 1, availableHeight - 1);
        g.DrawImage(this.images[currentImageIndex], printableArea);

        e.HasMorePages = ++currentImageIndex < this.images.Count();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.printDocument.OriginAtMargins = false;
        this.printDocument.Print();
    }
}

私が本当に理解できないのは、たとえば 2 番目の画像のページ サイズを変更する方法です。最初の画像を A​​4 で印刷し、次に 2 番目の画像を A​​3 で印刷したい場合、どうすればよいでしょうか?

私はこのSO question hereを見つけましPageSizePrintPageEventArgs.

私もQueryPageSettingsEventArgsイベントを使用してPageSettingsそこに設定しようとしましたが、それもうまくいかなかったようです...

私が達成したいのは、サイズの異なる複数のページを 1 つのドキュメントとして印刷することです。提案、リンク、説明、サンプル コードは大歓迎です。

C# や VB.NET であれば何でも構いません。

4

3 に答える 3

2

それは私にとっても仕事です。

C# に翻訳:

    private bool SetPaperSize(PrintDocument pd, PaperKind nKind)
    {
        foreach(System.Drawing.Printing.PaperSize ps in pd.PrinterSettings.PaperSizes)
        {
            if (ps.Kind == nKind)
            {
                pd.DefaultPageSettings.PaperSize = ps;
                return true;
            }
        }

        return false;
    }
于 2014-01-07T10:43:53.807 に答える