2011-11-09 135 views
1

我在打印時遇到了一些困難,當我將報告打印到物理打印機時,文本完全居中,但是當我將相同報告打印到PDF打印機(例如cutePDF)或XPS文檔編寫器時,左邊距變爲0 。同時,當我嘗試調整邊距時,它在PDF和XPS中可以正常工作,但物理打印會在頁面上打印一些額外的左邊距。我無法找到這種差異,我也試圖設置保證金只爲非物理印刷,但無法做到這一點。 如果可以根據打印機選擇來設置灰色,這將是很好的。如果我選擇PDF打印機或XPS書寫器,邊距會發生變化。我正在使用Printer.canvas.textout(),過程來打印文本。使用delphi打印

任何人都可以幫助我這個。

+2

歡迎來到StackOverflow。任何人都無法幫助解決您的問題,因爲您沒有發佈任何代碼。如果我們看不到您打印的方式,我們不可能看到您做錯了什麼。請記住,我們無法從這裏看到您的屏幕,因此我們擁有的所有信息都是您在問題中提供的信息。請編輯您的文章並提供相關代碼(您也可以嘗試在問題中添加一些分段符,以使其更具可讀性)。爲了讓我們幫助你解決問題,你必須幫助我們理解它。謝謝。 :) –

回答

0

如果您使用TextOut(而不是DrawText),您可以在x和y座標上放置需要打印的字符串。您可以在調試器中執行計算(或者如果應用程序在沒有調試器的情況下運行,則記錄它們)。在確定座標時可能出了點問題(例如TextExtend無法在居中之前測量文本,例如分辨率與您所期望的不同,您可以通過轉換得到Printer Canvas,因此座標與像素之間的座標不是1:1。

如果您不確定座標/字體問題:嘗試在預期座標處繪製一些框,以便您可以將與字體相關的所有錯誤排除在等式之外。如果它們表現出相同的問題,那麼這是一個座標問題,如果不是字體問題不知何故。

肯說的,我們不知道任何事情更多,如果你不顯示的代碼......這麼多的可能性..

+0

如果你堅持你的回答,直到它是正確的問題,它會更好(並可能讓你upvotes)。試圖回答一個非問題只是鼓勵人們不要編輯和改進它。 (不要低估你的答案,但不要高估你的答案。)提問者可以在調試器中執行計算的事實是**猜測**用戶可能實際上正在根據特定輸出進行某種計算,看起來他們不是。等待代碼和信息意味着你在回答時有一些事情要繼續。 :) –

+0

感謝您的回覆。我會嘗試發佈一些示例代碼 – Dinesh

+0

@Ken:我不同意你的看法。是的,更多的信息和更好的源代碼會更好地工作,但他確實說過,他試圖將使用textout繪製的文本居中。所以我不是在猜測。如果你會仔細閱讀小說,你會發現它包含了你顯然首先注意到的更多信息。 –

3

個一些點,這是值得被highligted:

  • 從Windows(和Delphi的TPrinter.Canvas)POV,有沒有等概念利潤率拉伸過程:整個紙張大小可在畫布上 - 爲例如,X = 0將指向紙張的絕對最左側部分;
  • 根據打印機的功能,有所謂的「硬件邊距」或「實際邊距」:這是紙張周圍的不可打印區域;也就是說,如果您在此區域繪製某些東西,則不會被繪製 - 這些邊距取決於所使用打印機的技術和型號,並且在某些情況下,可以通過打印機驅動程序檢索這些「邊距」值GetDeviceCaps API calls;
  • 但是,從我的實驗中,不要相信打印機驅動程序檢索到的那些「物理邊距」 - 使用某些軟件定義邊距會更好(也更美觀),並讓用戶在必要時進行更改(如MS Word的「頁面佈局」選項);
  • PDF打印機通常是虛擬打印機,所以它們沒有任何「物理邊距」;
  • 當您打印PDF文檔時,Acrobat Reader能夠將頁面內容「合適」爲物理打印機的「物理邊距」。

因此,這裏有一些可能的解決方案:

  • 從Acrobat Reader軟件,如果你的PDF沒有保證金,點擊打印,然後選擇「適合可打印區域」中的「頁面處理/頁面縮放「選項 - 我想你的設置是」無「,所以結果被打印機截斷;
  • 從您的Delphi應用程序中,在繪製報告時設置一些「邏輯」邊距(例如紙張周圍1釐米) - 也就是說,不要從X = 0和Y = 0開始,但有一些偏移量,您繪圖區域的寬度和高度會更小(例如,請參閱我們的開放源代碼Report engine)。
  • 從您的Delphi應用程序中,如果您使用報表組件,應該有一些屬性來設置邊距。

請參閱this article關於使用Delphi的一般打印(有些信息是舊的,但大部分仍然準確),或正確設置您的報表引擎。

+0

非常感謝這麼好的解釋。我認爲你所要求的在頁面上有一些「合乎邏輯的」邊界是很好的。 – Dinesh

+0

在Delphi XE2(至少)'打印機。PageWidth'等於'GetDeviceCaps(DC,HorzRes)',它是頁面的*可打印*區域的寬度,即小於紙張的物理寬度。 –