PDF中的黑色条纹而不是图像

时间:2018-07-08 14:54:59

标签: c# .net image pdf itext

所以我正在为我的客户制作软件,当我向他展示他的输出(PDF)时,奇怪的黑色条纹而不是图像出现在输出中。 这让我感到惊讶,因为它在我的计算机和笔记本电脑上都能正常工作而没有任何问题。因此,当我在虚拟机上进行尝试后,同样的问题发生了。

左侧虚拟机输出,对我的电脑正确 Left virtual machine output, right my computer

页眉和页脚始终保持相同,并且仅在页面之间切换内容。

PDF页面包含三个块:页眉,内容,页脚 The PDF page consists of three blocks: Header, Content, Footer

我通过截取屏幕截图并切换内容然后将图像放入PDF来创建PDF。 (输出总是打印出来的,所以没关系)。

  • 主表格为595 x 835
  • 标题为595 x 65
  • 内容为595 x 705
  • 脚是595 x 65

构成PDF的部分代码

FileStream PDFfile = new FileStream(PDFpath + "//" + filename + "_" + i + ".pdf", FileMode.Create);
Document Document = new Document(PageSize.A4, 25, 25, 25, 25);
PdfWriter Writer = PdfWriter.GetInstance(Document, PDFfile);
Document.AddAuthor("Clientela garde");
Document.AddCreator("http://www.icsharp.eu");
Document.AddKeywords("Výpis do PDF");
Document.AddSubject("Výpis informací pro klienta");
Document.AddTitle("Finanční gramotnost");
// Výpis do stránky
Document.Open();
try
{
    Page1.Hide();
    Page2.Hide();
    Page3.Hide();
    Page4.Hide();
    Page5.Hide();


    Page1.Show();
    System.Drawing.Rectangle bounds = this.Bounds;
    using (Bitmap bitmap = new Bitmap(595, 835))
    {
        System.Drawing.Rectangle rct = new System.Drawing.Rectangle(new Point(bounds.Left - EcoTron.PDFCreator.ActiveForm.Location.X, bounds.Top - EcoTron.PDFCreator.ActiveForm.Location.Y), bounds.Size);
        EcoTron.PDFCreator.ActiveForm.DrawToBitmap(bitmap, rct);
        iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(bitmap, System.Drawing.Imaging.ImageFormat.Bmp);
        bitmap.SetResolution(1190, 1684);
        PdfPTable HeaderTable = new PdfPTable(1);
        HeaderTable.DefaultCell.Border = 0;
        HeaderTable.WidthPercentage = 100;
        PdfPCell ImageCell = new PdfPCell();
        ImageCell.Border = 0;
        img.ScaleAbsolute(595 - 50, 835 - 50);
        ImageCell.AddElement(img);
        HeaderTable.AddCell(ImageCell);
        Document.Add(HeaderTable);
    }

2 个答案:

答案 0 :(得分:1)

所以我发现了问题所在。

这行代码:

            System.Drawing.Rectangle bounds = this.Bounds;

似乎只接受可见窗口大小的边界(我不确定原因),所以我将其更改为:

                System.Drawing.Rectangle bounds = this.Bounds;
                bounds.Size = new Size(595, 835);

它强制将窗口的实际大小范围限制到屏幕上。现在看来问题已经解决了。

答案 1 :(得分:1)

您描述的工作流程似乎异常复杂和脆弱。

也许您应该考虑其他创建文档的方法。

  1. 生成HTML文档并将HTML转换为PDF(iText7 + pdfHTML
  2. 使用JFreeChart之类的图形生成图形,将它们导出到BufferedImage并直接添加到PDF
  3. 将图形生成为SVG图像,然后将其直接添加到PDF