سؤال

لدي تتبع رمز الطباعة:

void Print(QPrinter *printer)
{
    QPainter q(printer);
    q.setRenderHint(QPainter::HighQualityAntialiasing, true);

    q.setPen(QPen(QColor("red")));
    q.drawRect(printer->pageRect());
    q.drawLine(printer->pageRect().topRight(), printer->pageRect().bottomLeft());

    q.setPen(QPen(QColor("blue")));
    q.drawRect(printer->paperRect());
    q.drawLine(printer->paperRect().topRight(), printer->paperRect().bottomLeft());
}

النتيجة مختلفة مع qprintpreviewdialog، قدم PDF، الإخراج إلى الطابعات (HP LaserJet، Pdffactory، PDFCreator). معظم الوقت المستطيل الناتج خارج الورق. ما يجب القيام به حتى يشبه الإخراج جميع الطابعات؟

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

المحلول 2

تراجع كود كيو تي راجعت 5٪ من الورق كما هو هامش. لا أحد يثق في هوامش الورق الصحيحة.

نصائح أخرى

لقد سئل هذا حقا منذ بعض الوقت، لكنني أخذت الشفرة من الأعلى وكلفتني ببعض ساعات لمعرفة ما هو الخطأ في ذلك. أولا، بالنظر إلى التعليمات البرمجية المصدرية كيو تي، لم أجد أي مكان يفترض بهامش 5٪. تقرأ QT الهوامش بشكل صحيح من نظام التشغيل Windows XP ويمكنك الوثوق بهامش الصفحة (QT 4.5.3 مع نظام التشغيل Windows XP).

يحتوي الرمز أعلاه على مشكلتين: لطباعة PaperRect، يجب تعيين خيار Fullpage. ثم تتم طباعة PaperRect على الأقل على المعاينة بشكل صحيح. بالطبع ليس على طابعة حقيقية، كما هو خارج Pagerect. بشكل عام، طباعة Paperrect لا معنى لها، كما، إذا كانت مطبوعة بشكل صحيح، فإنه يكمن تماما على الحدود الورقية.

تنبع القضية الرئيسية الثانية من الطباعة Pagerect دون تصحيح الأصل. إذا تم تعطيل كامل (افتراضي)، فإن أصل Pagerect يقع في أصل Paperrect وبالتالي يتضمن الهوامش. لكن الطباعة تبدأ في QPOINT (اليسار، TopMargin)، لذلك يتم إضافة الهامش مرتين.

لإصلاح المشكلة، يجب استدعاء Pagerect.moveto (0،0) ثم يطبع Pagerect بشكل جيد حيث ينتمي.

تظهر أن الطابعات المختلفة تظهر نتائج مختلفة تأتي من هوامش جهاز مختلفة. فقط الأجهزة التي تحتوي على هامش 0 ستعمل مع التعليمات البرمجية الأصلية.

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