PageSetupDialog 控制元件頁邊距bug的完整解決
列印設定對話方塊點選確定頁邊距不斷變化的問題,網上找到了一部分解決辦法,都是隻解決了列印設定對話方塊點選確定頁邊距不斷變化的問題,沒有解決初次開啟對話方塊的資料準確問題、沒有考慮和列印預覽、真實列印設定資料準確聯動的問題,也就是列印預覽裡的邊距那些資料的同步。
如果使用者的區域採用美製,那麼完全沒有此BUG;但採用公制,系統底層一律會將對話方塊設定的邊距儲存為以百分之一英寸為單位,但是讀取的時候出了叉子,以十分之一毫米為單位提取到對話方塊裡,這就是bug的由來。比如預設設定100(官方說明:Margins ,表示頁邊距,以百分之一英寸為單位。 預設情況下各邊的邊距都為 1 英寸),100(十分之一毫米)轉換為毫米,那麼對話方塊裡顯示10毫米,實際上應該為25.4毫米,也就是1英寸。同時預覽對話方塊(以百分之一英寸為單位)理應為100。另外,如果幾個對話方塊都關聯到列印文件的話,無論設定哪個的頁邊距,都會同時變化,也就是說他們引用和設定的都是同一個物件。上程式碼:
Imports System.IO Imports System.Drawing.Printing Public Class Form1 Private stringToPrint As String Private printFont As New Font("Arial", 10) Private blnMetric As Boolean '記錄頁面邊距的單位是否是公制 Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click OpenFileDialog1.Filter = "Text files (*.txt)|*.txt" OpenFileDialog1.ShowDialog() If OpenFileDialog1.FileName <> "" Then Try Dim MyFileStream As New FileStream(OpenFileDialog1.FileName, FileMode.Open) RichTextBox1.LoadFile(MyFileStream, RichTextBoxStreamType.PlainText) MyFileStream.Close() btnPrint.Enabled = True btnSetup.Enabled = True btnPreview.Enabled = True Catch ex As Exception MessageBox.Show(ex.Message) End Try End If End Sub Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click Try stringToPrint = RichTextBox1.Text PrintDialog1.Document = PrintDocument1 If blnMetric Then PageSetupDialog1.PageSettings.Margins = PrinterUnitConvert.Convert( _ PageSetupDialog1.PageSettings.Margins, PrinterUnit.TenthsOfAMillimeter, PrinterUnit.Display) blnMetric = False End If Dim result As DialogResult = PrintDialog1.ShowDialog() If result = DialogResult.OK Then PrintDocument1.DocumentName = "我的文件" PrintDocument1.Print() End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim numChars, numLines As Integer Dim stringOnePage As String Dim strFormat As New StringFormat Dim rectDraw As New RectangleF(e.MarginBounds.Left, e.MarginBounds.Top, e.MarginBounds.Width, e.MarginBounds.Height) Dim sizeMeasure As New SizeF(e.MarginBounds.Width, e.MarginBounds.Height - printFont.GetHeight(e.Graphics)) strFormat.Trimming = StringTrimming.Word e.Graphics.MeasureString(stringToPrint, printFont, sizeMeasure, strFormat, numChars, numLines) Console.WriteLine(numLines) stringOnePage = stringToPrint.Substring(0, numChars) e.Graphics.DrawString(stringOnePage, printFont, Brushes.Black, rectDraw, strFormat) If numChars < stringToPrint.Length Then stringToPrint = stringToPrint.Substring(numChars) e.HasMorePages = True Else e.HasMorePages = False stringToPrint = RichTextBox1.Text '無此句則列印預覽裡列印一次過後再次列印只打最後一頁 End If End Sub Private Sub btnSetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetup.Click Try PageSetupDialog1.Document = PrintDocument1 If Not blnMetric Then '載入列印設定對話方塊,如果現在的單位是美製,則轉為公制 PageSetupDialog1.PageSettings.Margins = PrinterUnitConvert.Convert( _ PageSetupDialog1.PageSettings.Margins, PrinterUnit.Display, PrinterUnit.TenthsOfAMillimeter) blnMetric = True End If If PageSetupDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then PageSetupDialog1.PageSettings.Margins = PrinterUnitConvert.Convert( _ PageSetupDialog1.PageSettings.Margins, PrinterUnit.Display, PrinterUnit.TenthsOfAMillimeter) End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click Try PrintPreviewDialog1.Document = PrintDocument1 If blnMetric Then PageSetupDialog1.PageSettings.Margins = PrinterUnitConvert.Convert( _ PageSetupDialog1.PageSettings.Margins, PrinterUnit.TenthsOfAMillimeter, PrinterUnit.Display) blnMetric = False End If stringToPrint = RichTextBox1.Text PrintPreviewDialog1.ShowDialog() Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load PrintDocument1.DefaultPageSettings.Margins.Top = 100 PrintDocument1.DefaultPageSettings.Margins.Bottom = 100 PrintDocument1.DefaultPageSettings.Margins.Left = 80 PrintDocument1.DefaultPageSettings.Margins.Right = 80 End Sub End Class
相關推薦
PageSetupDialog 控制元件頁邊距bug的完整解決
列印設定對話方塊點選確定頁邊距不斷變化的問題,網上找到了一部分解決辦法,都是隻解決了列印設定對話方塊點選確定頁邊距不斷變化的問題,沒有解決初次開啟對話方塊的資料準確問題、沒有考慮和列印預覽、真實列印設定資料準確聯動的問題,也就是列印預覽裡的邊距那些資料的
[轉]簡單的動態修改RDLC報表頁邊距和列寬的方法
schema serve def name star nbsp http 動態 xpath 本文轉自:http://star704983.blog.163.com/blog/static/136661264201161604413204/ 1.修改頁邊距 XmlDo
使用freemarker匯出html格式的word(調整頁邊距,頁面檢視,正常表格樣式)
RT,耗費了博主半個月的時間才擠出來的成果,在此記錄下開發過程。 一、建立freemark模板 首先在web專案中指定目錄下建立一個HTML格式的freemarker模板: <!DOCTYPE html> <html xmlns:v="urn:schemas-mic
PHPExcel設定頁邊距 格式 顏色 大小等
這篇為phpexcel的中文翻譯版,基本涵蓋了你想要做的任何東西,主要是別人寫的東西,又加了一些自己經過實踐過的,僅供參考 PHPExcel開發者文件 1.目錄 2. 4先決條件 2.1。軟體要求4 2.2。安裝說明4 2.3。入門4 2.4。有用的連結和工具4 2.4.1。的OpenXML
頁面直接匯出為PDF檔案,支援分頁與頁邊距
將WEB頁面直接匯出為pdf檔案是經常會用到的一個功能,尤其是各種報表系統。總結了一下目前幾種主流的做法: 在後端用程式碼生成pdf檔案,比如iText一類; 在後端抓取頁面並生成pdf檔案,比如phantomjs一類; 在前端用js直接生成pdf檔案; 方案3的優勢在於前端直接
Latex之頁邊距設定
geometry 巨集包可以方便地調整頁邊距。 \usepackage{geometry} 整體調整 \geometry{a4paper,scale=0.8} 設定了紙張為a4,並且版心佔頁面長度的比例為80%;scale也可以改為ratio,表示版面邊距
【語言-c#】關於Excel頁邊距換算
Excel預設的單位為釐米(cm)。 C#程式碼設定頁邊距對應的(pt)。 pt全稱為point,是一種專用的印刷單位"點"。 英寸(inch,縮寫為in.)在荷蘭語中的本意是大拇指,一英寸就是指
Android控制元件--側邊欄SideBar
說明 很多應用中我們都能看到關於側邊欄的使用,比如微信啊,QQ啊,美團啊等等,最常見的應該就是通訊錄裡面對聯絡人進行A~Z的排序。側邊欄主要是方便使用者進行字母索引。資料連結:http://blog.csdn.net/xiaanming/article/det
JavaScript實現網頁列印,可設定頁首、頁尾、頁邊距
WebBrowser是IE內建的瀏覽器控制元件,無需使用者下載,即可實現客戶端頁面列印。 關於這個元件還有其他的用法,列舉如下: WebBrowser.ExecWB(1,1) 開啟 Web.ExecWB(2,1) 關閉現在所有的IE視窗,並開啟一個新視窗 Web.Exe
需要這樣一個記事本-15 ReportViewer列印預設頁邊距、頁面方向問題
問題描述 利用ReportViewer列印,預設總是縱向列印,且橫向列印不可選,頁邊距每次都要調整。導致結果就是一頁內容卻列印在了多張紙上。 解決方案 設定*.rdlc檔案報表屬性 Margins屬
js頁面設定與列印(頁首頁尾,頁邊距設定)
//獲得IE瀏覽器版本 function checkIEV() { var X, V, N; V = navigator.appVersion; N = navigator.appName; if (
latex設定頁面邊距,頁面大小,頁邊距,geometry巨集包
很多latex模板都將頁面邊距設定好了,自己不用怎麼修改。但有時候也需要自己來設定頁邊距,查閱了相關資料,發現使用 geometry 巨集包可以方便地調整頁邊距。 \usepackage{geometry} \geometry{a4paper,scale=0.8} 上面
js列印分頁 去頁尾 頁邊距
做檔案系統的時候。需要列印多張圖片。客戶使用ie9-11 背景如上。下面是開啟列印頁面。使用了ie自帶的execwb if(format==0){ for(var i=0;i<pageArray.length;i++){ i
一個關於tableView的footerView的子控制元件y 座標的 BUG
#import"ZJHAboutViewController.h" #import "ZJHUserProtocolViewController.h" #import "UIView+Extension.h" #import "UIColor+Helpers.h"#define kWIDTH [UIScree
IE6下margin雙倍邊距Bug的處理辦法
改了一天,我才發現了問題,除了IE6雙倍邊距之外,其他的瀏覽器都沒有問題,為此改了無數次的程式碼。為了修復雙倍邊距bug,整理了一下的資料。 一、什麼是雙邊距Bug? 先來看圖: 我們要讓
Java PDF頁面設置——頁面大小、頁邊距、紙張方向、頁面旋轉
.html 上下 tin sca ref 效果 方法 image ++ 下面的示例將介紹通過Java編程來對PDF頁面進行個性化設置的方法,包括設置頁面大小、頁邊距、紙張方向、頁面旋轉等。這裏有如下多種頁面大小尺寸可供選擇; 同時,設置文檔內容旋轉時,可支持如下角度進行內
IE6的雙倍邊距bug
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html
Java 設定Word頁邊距、頁面大小、頁面方向、頁面邊框
本文將通過Java示例介紹如何設定Word頁邊距(包括上、下、左、右)、頁面大小(可設定Letter/A3/A4/A5/A6/B4/B5/B6/Envelop DL/Half Letter/Letter 11x17等常見紙張大小)、頁面方向(Landscape/Portrait)、頁面邊框(包括頁面邊框、段落
VS2017 使用者自定義控制元件未出現在工具箱的解決方案
在專案中增加幾個使用者自定義控制元件,想及時在視窗Form上新增時卻發現工具箱根本就沒有這些使用者自定義控制元件,研究了很久,發現有兩個解決辦法。通過以下兩種方法操作後,再重新編譯,在工具箱上就會出現使用者自定義控制元件了,專案中所有的自定義控制元件都會及時顯示到工具箱上。 【1】工
IE6雙倍邊距問題及其解決方法
IE6雙倍邊距在網頁佈局中是一個很常見的問題,網上關於IE6雙倍邊距的問題討論很多,但大多比較籠統,一般認為在塊元素(比如div)中同時出現flaot和margin兩個樣式時就會在IE6中產生雙倍邊距,寫這篇文章的目的,就是把這個問題討論得透徹一些,讓大家明白,到底在什麼