Как переопределить Custom Papersize в С#
Я работаю над проектом на С#. У меня есть ярлык, которому нужно распечатать документ, который я отправляю. Однако принтер печатает, но я не могу переопределить следующие значения формата Custom
Paper (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
из настроек диалога.
Я также хочу отметить, что есть еще 2 программы, которые действительно могут переместиться через значение 300 и расширить PrintableArea
. Кто может помочь?
РЕДАКТИРОВАТЬ 2
После комментария Shakir Ahamed я получил немного дальше:
gyazo.com/3298e480b77c5ba837b071b2ec4f7b8d Я получаю это, что намного больше, чем я использовал, используя последнее решение. Но когда я печатаю его, страница обрезается в 300 снова, как обычно, она всегда отключается по значению, указанному в диалоговом окне (поле со значением 300 и 400).
Мне кажется, что он не будет работать с основными параметрами печати, потому что я считаю, что драйвер переопределяет значения страниц и просто отключает их, не заботясь о PaperSizes
. Я прочитал что-то о структуре DEVMODE
, что все это возможно? Могу ли я переопределить настройки драйвера принтера здесь и печатать бесконечно длинные отпечатки с непрерывным рулоном?
РЕДАКТИРОВАТЬ 3 (разрешено, 20 окт 2016)
Для всех, кто интересуется,
Некоторые другие проблемы возникли с моим принтером, и он начал действовать странно (например, не печатать задания печати). В конце концов, я думаю, что что-то пошло не так с установкой драйверов. Я удалил драйверы и переустановил все в соответствии с компакт-диском с драйверами, и теперь мой первоначально опубликованный код просто кажется сработавшим. Вид обломка, так как я потратил столько времени на кодирование только с плохой установкой драйвера. Теперь я могу печатать более 300 единиц, и я могу печатать с непрерывным рулоном более 25 см, если захочу. Спасибо всем, кто думал со мной, чтобы решить эту проблему!
Ответы
Ответ 1
Попробуйте это вместо ваших настроек, прежде чем устанавливать пользовательский параметр, назначьте экземпляр 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;
Ответ 2
Если вам нравится печатать в 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();
}
где строка
Документ pdfDoc = новый документ (новый RectangleReadOnly (1500, 1500), 5, 5, 5, 5);
показать высоту и ширину размера страницы и отступов на странице.
Ответ 3
Просто идея: вы устанавливаете RawKind-Property в PaperKind.Custom, который равен = 0.
В документации говорится:
Значение, равное 48 или 49 или больше, чем 118, указывает размер пользовательской бумаги
и RawKind = 0 там не определено.
Возможно, драйвер принтера не может правильно его обработать, и вы можете попробовать установить RawKind = 119 или s.th. как это.
Привет