使用iTextSharp在C#中打印PDF

7

我有一个打印pdf的问题。 我的文档是通过在pdf文档中写入一些值并保存来创建的。

public void CreateDocument(string name)
    {

        string oldreport = @"..\Resources\FehlerReport.pdf";
        string newreportpath = @"..\Resources\" + name;
        using (var newFileStream = new FileStream(newreportpath, FileMode.Create))
        {
            var pdfReader = new PdfReader(oldreport);

            var stamper = new PdfStamper(pdfReader, newFileStream);

            var form = stamper.AcroFields;

            var fieldKeys = form.Fields.Keys;

            form.SetField("Auftragsnummer", Kundeninformation.Auftragsnummer.ToString());
            form.SetField("Kundensachnummer", Kundeninformation.Kundensachnummer.ToString());
            form.SetField("Kundenname", Kundeninformation.Kundenname.ToString());
            form.SetField("Kundenbestellnummer", Kundeninformation.Kundenbestellnummer.ToString());
            form.SetField("Kundenrezepturnummer", Kundeninformation.Kundenrezepturnummer.ToString());
            form.SetField("Spulennummer", Kundeninformation.Spulennummer.ToString());

            form.SetField("Fertigungsdatum1", System.DateTime.Today.ToString("dd.MM.yy"));

            int i = 1;
            foreach (var item in _MeasurementReport.MeasurementReportItems)
            {
                form.SetField(("UhrzeitRow" + i).ToString(), item.Uhrzeit.ToString("HH:mm:ss"));
                form.SetField(("FehlerindexRow" + i).ToString(), i.ToString());
                form.SetField(("Position mmRow" + i).ToString(), (item.Laufmeter * pixelSize).ToString("0.00", System.Globalization.CultureInfo.InvariantCulture));
                form.SetField(("HoeheRow" + i).ToString(), (item.DefectCountours.H * pixelSize).ToString("0.00", System.Globalization.CultureInfo.InvariantCulture));
                form.SetField(("Breite mmRow" + i).ToString(), (item.DefectCountours.W * pixelSize).ToString("0.00", System.Globalization.CultureInfo.InvariantCulture));
                form.SetField(("Flaeche Row" + i).ToString(), (item.DefectCountours.W * pixelSize * pixelSize).ToString("0.00", System.Globalization.CultureInfo.InvariantCulture));
                i++;
            }

            form.SetField("Datum", System.DateTime.Today.ToString("dd.MM.yy"));
            form.SetField("Uhrzeit", System.DateTime.Now.ToString("HH:mm"));

            stamper.FormFlattening = true;


            stamper.Close();
            pdfReader.Close();
        }

    }

现在我想要使用这个函数打印文档,该函数还调用了CreateDocument函数。它可以打印,但是打印出来的纸张是白色的。我检查了是否已经创建了pdf文件,确实已经创建了,但显然没有被打印。

    public void Print()
        {

            string name = Kundeninformation.Auftragsnummer + "_" + Kundeninformation.Spulennummer+".pdf";
            CreateDocument(name);
            List<string> PrinterFound = new List<string>();
            PrinterSettings printer = new PrinterSettings();
            foreach (var item in PrinterSettings.InstalledPrinters)
            {
                PrinterFound.Add(item.ToString());
            }
            printer.PrinterName = PrinterFound[7];
            printer.PrintFileName = name;

            PrintDocument PrintDoc = new PrintDocument();

            PrintDoc.DocumentName = @"..\Resources\"+name;
            PrintDoc.PrinterSettings.PrinterName = PrinterFound[7];

            PrintDoc.Print();
}

请确认一下,您已经成功创建了PDF文件,对吗?您已经使用Adobe Acrobat或Reader等程序进行验证和手动打印了吗?我之所以问这个问题,是因为如果我们在这方面没有问题,那么我们就可以专注于解决您的打印问题,而忽略PDF生成部分。 - Chris Haas
它是在我的笔记本电脑上创建的,但显然在另一台电脑上远程创建时并没有正确创建。不知道那里出了什么问题。但专注于打印问题就可以了。 - atix
你读过这个帖子吗?https://dev59.com/K4nda4cB1Zd3GeqPFute (针对Java) - Arne S
1个回答

1

确保你的文件已完全创建...否则你将遇到这个问题。为了快速测试,在文件创建和打印之间加入一些延迟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接