पर प्रस्तुत करता है मैं QPrinter और QPainter का उपयोग कर एक उच्च-रिज़ॉल्यूशन (1200 डीपीआई) पीडीएफ दस्तावेज़ बना रहा हूं। मैं QTextDocument :: drawContents का उपयोग कर उसी रिज़ॉल्यूशन पर टेक्स्ट खींचने की कोशिश कर रहा हूं। कारण मैं QTextDocument का उपयोग करना चाहता हूं क्योंकि मुझे अपने दस्तावेज़ में कई तालिकाओं और स्वरूपित पाठ को शामिल करने की आवश्यकता है।QTextDocument :: drawContents केवल 96 डीपीआई
मेरी समस्या यह है कि QTextDocument :: drawContents हमेशा स्क्रीन रिज़ॉल्यूशन पर टेक्स्ट डालें, जो मेरे मामले में 9 6 डीपीआई है। मेरे द्वारा अब तक पाए गए सभी समाधान सही आकार को प्राप्त करने के लिए पाठ को स्केल करने का सुझाव देते हैं। हालांकि, इसका परिणाम कम गुणवत्ता वाले पाठ में होता है, जिसे मैं बर्दाश्त नहीं कर सकता।
मेरा प्रश्न: क्या एक उच्च संकल्प पर QTextDocument की सामग्री को आकर्षित करने का कोई तरीका है?
नीचे दिया गया कोड एक पीडीएफ फ़ाइल बनाता है जिसमें पाठ की 2 पंक्तियां होती हैं, एक QPainter :: drawText का उपयोग करके खींचा जाता है और QTextDocument :: drawContents का उपयोग करके खींचा जाता है। स्केलिंग के परिणामस्वरूप निम्न गुणवत्ता की समस्या पर जोर देने के लिए मैंने एरियल 8pt फ़ॉन्ट का उपयोग किया है।
// Read the screen resolution for scaling
QPrinter screenPrinter(QPrinter::ScreenResolution);
int screenResolution = screenPrinter.resolution();
// Setup the font
QFont font;
font.setFamily("Arial");
font.setPointSize(8);
// Define locations to insert text
QPoint textLocation1(20,10);
QPoint textLocation2(20,20);
// Define printer properties
QPrinter printer(QPrinter::HighResolution);
printer.setOrientation(QPrinter::Portrait);
printer.setPaperSize(QPrinter::A4);
printer.setResolution(1200);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test.pdf");
// Write text using QPainter::drawText
QPainter painter;
painter.begin(&printer);
painter.setFont(font);
painter.drawText(textLocation1, "QPainter::drawText");
// Write text using QTextDocument::drawContents
QTextDocument doc;
doc.setPageSize(printer.pageRect().size());
QTextCursor cursor(&doc);
QTextCharFormat charFormat;
charFormat.setFont(font);
cursor.insertText("QTextDocument::drawContents", charFormat);
painter.save();
painter.translate(textLocation2);
painter.scale(printer.resolution()/screenResolution, printer.resolution()/screenResolution);
doc.drawContents(&painter);
painter.restore();
painter.end();
समस्या एक PDF उत्पादन के साथ दिखाने के लिए प्रतीत नहीं होता है क्योंकि पाठ या तो विधि के साथ पीडीएफ फाइल में rasterized संग्रहीत नहीं है ('QPainter' अलग ढंग से पाठ व्यवहार करता है, यहां तक कि जब आप घुमाते हैं या इसे पुन: सहेजते हैं)। कम गुणवत्ता वाली समस्या को पुन: पेश करने के लिए एडोब रीडर में बदलने के लिए कुछ विकल्प हैं? – alexisdm
मैंने बनाई गई पीडीएफ फ़ाइल खोलने के लिए फॉक्सिट रीडर (डिफ़ॉल्ट सेटिंग्स के साथ) का उपयोग किया। मैं विंडोज वातावरण पर कोड चला रहा हूं और क्यूटी 4.7.1 का उपयोग कर रहा हूं, अगर इससे कोई फर्क पड़ता है। मैं वास्तव में हैरान हूं कि अंतर एडोब रीडर पर दिखाई नहीं देता है। – d11
यह वास्तव में तथ्य है कि एक पैमाने परिवर्तन की आवश्यकता है जो मुझे बताता है कि पाठ 96 डीपीआई पर खींचा जा रहा है। देखें कि स्केल रूपांतरण कब छोड़ा जाता है और/या जब दूसरी QPrinter ऑब्जेक्ट के कन्स्ट्रक्टर को पारित पैरामीटर QPrinter :: ScreenResolution में बदल जाता है तो क्या होता है। – d11