Печать Pdf-документа Штрих-код, сгенерированный шрифтом в С#

У меня есть небольшое приложение, где я выполняю печать PDF-документов. Все в порядке, кроме файлов, в которых штрих-код генерируется из шрифта, эта часть страницы выглядит деформированной (штрих-код в середине штрих-кода). Кто-нибудь знает, почему это происходит, любой подход исправить это?

Мой код:

public static void PrindDocument(string filePath, PrinterSetting printerSetting, int copies)
        {

            SpirePdf.PdfDocument doc = new SpirePdf.PdfDocument();
            doc.LoadFromFile(filePath);
            PrintDialog dialogPrint = new PrintDialog();
            dialogPrint.AllowPrintToFile = true;
            dialogPrint.AllowSomePages = true;
            dialogPrint.PrinterSettings.MinimumPage = 1;
            dialogPrint.PrinterSettings.MaximumPage = doc.Pages.Count;
            dialogPrint.PrinterSettings.FromPage = 1;
            dialogPrint.PrinterSettings.ToPage = doc.Pages.Count;
            dialogPrint.PrinterSettings.Copies = (short)copies;

            var paperSize = dialogPrint.PrinterSettings.PaperSizes.Cast<PaperSize>().FirstOrDefault(e => e.PaperName == printerSetting.Pageformat);
            dialogPrint.PrinterSettings.DefaultPageSettings.PaperSize = paperSize;
            doc.PrintFromPage = dialogPrint.PrinterSettings.FromPage;
            doc.PrintToPage = dialogPrint.PrinterSettings.ToPage;
            doc.PrinterName = printerSetting.Printer;
            PrintDocument printDoc = doc.PrintDocument;
            printDoc.DefaultPageSettings.PaperSize = paperSize;
            printDoc.PrinterSettings.Copies = (short)copies;
            dialogPrint.Document = printDoc;
            printDoc.PrintController = new System.Drawing.Printing.StandardPrintController();
            printDoc.Print();

        }

Я пробовал другой метод, но этот метод делает то же самое:

private void SendToPrinter()
    {
        ProcessStartInfo info = new ProcessStartInfo();
        info.Verb = "print";
        info.FileName = @"c:\output.pdf";
        info.CreateNoWindow = true;
        info.WindowStyle = ProcessWindowStyle.Hidden;

        Process p = new Process();
        p.StartInfo = info;
        p.Start();

        p.WaitForInputIdle();
        System.Threading.Thread.Sleep(3000);
        if (false == p.CloseMainWindow())
            p.Kill();
    }

Пример файла PDF можно найти здесь: https://www.dropbox.com/sh/7vhnyji10f4ekx3/AACI2XtG3PoiHzGzoJNbH_k7a?dl=0

Также я хотел бы упомянуть, что когда я печатаю этот файл обычным способом, например open with google chrome и print, он выглядит нормально.

Ответы

Ответ 1

Использование Spire,

    private void buttonSpire_Click(object sender, EventArgs e)
    {
        PdfDocument doc = new PdfDocument();
        doc.LoadFromFile(filename);

        PrintDocument(doc, printername, 1);
    }
    private void PrintDocument(PdfDocument doc, string printername, short copies)
    {
        PrintDialog dialogPrint = new PrintDialog();
        dialogPrint.AllowPrintToFile = true;
        dialogPrint.AllowSomePages = true;
        dialogPrint.PrinterSettings.MinimumPage = 1;
        dialogPrint.PrinterSettings.MaximumPage = doc.Pages.Count;
        dialogPrint.PrinterSettings.FromPage = 1;
        dialogPrint.PrinterSettings.ToPage = doc.Pages.Count;
        dialogPrint.PrinterSettings.Copies = copies;

        var paperSize = dialogPrint.PrinterSettings.PaperSizes.Cast<PaperSize>().FirstOrDefault(e => e.PaperName == "Letter");
        dialogPrint.PrinterSettings.DefaultPageSettings.PaperSize = paperSize;

        doc.PrintFromPage = dialogPrint.PrinterSettings.FromPage;
        doc.PrintToPage = dialogPrint.PrinterSettings.ToPage;
        doc.PrinterName = printername;

        PrintDocument printDoc = doc.PrintDocument;
        printDoc.DefaultPageSettings.PaperSize = paperSize;
        printDoc.PrinterSettings.Copies = copies;
        dialogPrint.Document = printDoc;

        printDoc.PrintController = new StandardPrintController();
        printDoc.Print();
    }

Проблема с штрих-кодом воспроизводится: весь штрих-код и текст сдвигаются вниз, а также несколько полей теряют текст Полужирный,

введите описание изображения здесь

Но если я получу Spire из картинки, сделаю следующее:

    private void buttonOther_Click(object sender, EventArgs e)
    {
        PrintDocument(filename);
    }
    private void PrintDocument(string filename)
    {
        ProcessStartInfo info = new ProcessStartInfo();
        info.Verb = "print";
        info.FileName = filename;

        Process p = new Process();
        p.StartInfo = info;
        p.Start();
    }

Проблема уходит: введите описание изображения здесь

У меня также установлен Adobe Acrobat на моей машине. Итак, я предполагаю, что, как только Spire не работает, Adobe Acrobat, по умолчанию, берет верх, и все работает нормально. Теперь, если все, что у вас есть, это только Spire, то вы застряли с ним. Попробуйте установить Acrobat и посмотрите, что вы получаете.

Btw, они используют Adobe в своих собственных образцах: введите описание изображения здесь