سؤال

أحاول طباعة قماش 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, ، ماذا أعود إلى حجج الهندسة الثلاث pageSize, bleedBox و contentBox?

شكرًا :)

هل كانت مفيدة؟

المحلول

حسنًا ، يبدو أن الطباعة تحدث دائمًا من (0, 0) (أعلى اليسار) من الورقة.

احصل على حجم الورقة مع:

printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight

والهوامش العلوية واليسرى مع:

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

افترضت أن الهوامش السفلية واليمنى كانت هي نفسها العلوية واليسار ، على الرغم من أن هذا قد لا يكون آمنًا.

يجب عليك توسيع نطاق القماش وتقسيمه كما تفعل عادة ، ثم قم بتطبيق أ TranslateTransform حجم هوامشك لنقل المحتوى إلى المنطقة القابلة للطباعة.

نصائح أخرى

هل نظرت إلى استخدام FlowDocument بدلاً من مجرد طباعة القماش؟ هناك مثال جيد على إنشاء والطباعة هنا.

نأمل أن ينفي ذلك الحاجة إلى الكثير من الرياضيات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top