我正在C#做一个项目。我有一个标签打印机,它需要打印我发送的文档。但是,打印机打印的Custom
纸张格式(荷兰语为Papierformaat)无法覆盖以下值:https://gyazo.com/e350ed1e355b45b8cae24196d2b5869b。如果我使new PaperSize();
的高度变小或等于300,它就能工作,但是如果我试图使它变大,比如说500,它会把它降低到300。为什么会发生这种事?似乎我无法覆盖链接图片中的值( 300)。
public void Printing()
{
try
{
streamToPrint = new StreamReader(filePath);
try
{
PrinterSettings settings = new PrinterSettings();
printFont = new Font("Arial", 10);
PrintDocument pd = new PrintDocument();
PaperSize paperSize = new PaperSize("Test", 315, 300);
paperSize.RawKind = (int)PaperKind.Custom;
pd.DefaultPageSettings.PaperSize = paperSize;
pd.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
pd.PrinterSettings.DefaultPageSettings.PaperSize = paperSize;
pd.PrinterSettings.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
pd.PrintPage += (sender, args) => Console.Out.WriteLine("Printable Area for printer {0} = {1}", args.PageSettings.PrinterSettings.PrinterName, args.PageSettings.PrintableArea);
Console.Out.WriteLine("My paper size: " + pd.DefaultPageSettings.PaperSize);
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
// Print the document.
pd.Print();
}
finally
{
streamToPrint.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
控制台中的输出如下:
My paper size: [PaperSize Test Kind=Custom Height=500 Width=315]
Printable Area for printer xxx = {X=0,Y=0,Width=400,Height=300}
编辑
对于那些想知道的人来说,我正在处理的是一台印钞机,有一个连续的卷轴。所以,从技术上讲,我可以打印一个无限高,设置宽度为80毫米的文件。但我似乎无法覆盖对话框设置中的Custom 300
值。
我还想指出的是,还有另外两个程序实际上能够遍历300个值并扩展PrintableArea
。谁能帮上忙?
编辑2
在沙奇尔·阿哈德发表评论之后,我得到了进一步的评论:
gyazo.com/3298e480b77c5ba837b071b2ec4f7b8d,这比我使用最后一个解决方案得到的要多得多。但是,当我打印它时,页面又会像以前一样在300处被切断,它总是在对话框中给定的值( 300和400值的框)下被切断。
我觉得它不适用于基本的打印选项,因为我认为驱动程序会重写页面值,只是在不关心PaperSizes
的情况下切断它们。我读过一些关于DEVMODE
结构的文章,那有什么可能呢?是否可以在这里重写打印机驱动程序设置,并使用连续滚动打印无限长的打印?
编辑3 (解决,10月20日。2016年)
对任何感兴趣的人来说,我的打印机出现了其他一些问题,并且开始表现得很奇怪(比如没有打印打印作业)。毕竟,我想安装司机时出了点问题。我删除了驱动程序,并根据驱动程序CD重新停止了所有操作,现在我最初发布的代码似乎一开始就正常工作。因为我浪费了那么多时间编写仅仅是一个糟糕的驱动程序安装,这有点让人扫兴。现在我可以打印超过300个单位,我可以打印一个连续超过25厘米,如果我想的话。感谢所有和我一起思考解决这个问题的人!
发布于 2016-09-02 12:13:07
在设置自定义设置之前,尝试这样做,而不是您的设置,将PrinterSettings实例分配给PrintDocument实例
PrinterSettings ps = new PrinterSettings();
PrintDocument printDoc = new PrintDocument();
printDoc.PrinterSettings = ps;
printDoc.DefaultPageSettings.PaperSize = new PaperSize("Custom", 315, 300);
或者这样做,我希望这能奏效。
PrintDocument pd = new PrintDocument();
pd.DefaultPageSettings.PaperSize = new PaperSize("Custom", 315, 300);
pd.DefaultPageSettings.PaperSize.RawKind = 119;
pd.PrinterSettings.DefaultPageSettings.PaperSize.RawKind = 119;
pd.DefaultPageSettings.Landscape = false;
发布于 2016-09-07 05:17:41
如果您喜欢在PDF上打印自定义大小,那么这段代码将帮助您。
添加DLL文件
iTextSharp。
protected void btn_SaveAs_Click(object sender, EventArgs e)
{
string FileName = "Image_" + System.DateTime.Now.ToString("dd_MM_yyyy_hh_mm_ss") + ".pdf"; // Download File Name here.
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=" + FileName);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
pnlPrint.RenderControl(hw); // In which panal name that want to convert in PDF
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(new RectangleReadOnly(1500, 1500), 5, 5, 5, 5); // Pge size Chgnge Using RectangleReadOnly(1500, 1500) You can put on size value.
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();
}
何地线
Document pdfDoc =新文档(新RectangleReadOnly(1500,1500),5,5,5,5);
在页面上显示页面大小和填充的高度和宽度。
发布于 2016-09-01 11:15:01
只是一个想法:将RawKind-属性设置为PaperKind.Custom,为= 0。文档说:
等于48或49或大于118的值表示自定义纸张大小。
这里没有定义RawKind =0。
可能打印机驱动程序无法正确处理它,您可能需要尝试设置RawKind = 119或s.th。就像这样。
问候
https://stackoverflow.com/questions/39209126
复制相似问题