Как переопределить 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. как это.

Привет