c# - 打印Pdf文档C#字体生成的Barcode

标签 c# .net pdf printing

我有一个小应用程序,我可以在其中执行 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

另外我想提一下,当我通过正常方式打印这个文件时,比如用谷歌浏览器打开并打印,它看起来没问题。

最佳答案

使用尖顶,

    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();
    }

条码问题重现:整个条码和文字都下移了,还有多个字段丢失了粗体文字,

enter image description here

但如果我将 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();
    }

问题消失了: enter image description here

我的机器上还安装了 Adob​​e Acrobat。所以,我猜想,一旦 Spire 不在画面中,默认情况下,Adobe Acrobat 就会接管一切,一切正常。现在,如果您只有 Spire,那么您就只能使用它了。尝试安装 Acrobat,看看会得到什么。

顺便说一句,他们在自己的示例中使用了 Adob​​e: enter image description here

关于c# - 打印Pdf文档C#字体生成的Barcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32785405/

相关文章:

c# - Exchange 401 未经授权

java - 使用itextpdf转换为PDF时如何使西里尔字符正确显示?

c# - 将gridview转换为itextsharp表并使用asp.net生成pdf

c# - 在第二部分和第三部分中输入低于 "An invalid IP address was specified"的数字时出现错误 "100"

c# - 了解 IEnumerable - IEnumerator 逻辑

c# - 如何以编程方式在 gridview 中添加更复杂的列

c# - 在 C# WinForms 中预览文档(Word、Excel、PDF、文本文件等)?

c# - 使用 .NET 删除目录中超过 3 个月的文件

.net - 是否有带有数据上下文的 ApplyPropertyChanges?

.net - 开发 .net 程序以在 GPU 而不是 CPU 上运行