【问题标题】:iTextSharp: Why when adding a image to a pdf page the text font is different?iTextSharp:为什么将图像添加到 pdf 页面时文本字体不同?
【发布时间】:2012-03-28 22:35:25
【问题描述】:

我使用 Helvetica 字体和 14 像素大小的文本。问题是,如果页面上没有任何图像,则文本非常清晰,但在至少有 1 个图像的页面中,文本会变得有点粗体。你可以在下面的图片中看到我的意思:

* 页面上没有图片

* 页面上有图片

正确的字体是图片 #1 中出现的字体。即使页面是否包含图像,如何使所有页面具有相同的字体?

谢谢。

示例代码:

Document document = new Document(PageSize.LETTER);
document.SetMargins(docMargin, docMargin, docMargin, 25);
writer = PdfWriter.GetInstance(document, new FileStream(filename, FileMode.Create));
document.Open();

Font defaultFont = FontFactory.GetFont("Helvetica", 7.8, Font.NORMAL, new Color(75, 75, 75));
document.Add(new Paragraph("Lorem ipsum lorem ipsum lorem ipsum", defaultFont));
document.Add(Chunk.NEWLINE);
Image img = Image.GetInstance("my png image path");
document.Add(img);

document.Close();

【问题讨论】:

    标签: image fonts pdf-generation itextsharp font-size


    【解决方案1】:

    我终于能够重现您的问题。我测试的第一个 PNG 没有重现我从 Photoshop 创建的问题并使用了 Save For Web 命令。我测试的第二个 PNG 能够重现我从 MSPAINT.EXE 创建的问题。我在 Save For Web 中尝试了各种组合,但没有一个与 Paint 有相同的问题。

    根据 iText 官方邮件列表中的this thread,这似乎与图像的颜色配置文件有关。

    您看到的是新放置的透明度对 以前未包含它的 PDF,如果不考虑 为最终输出文档的混合色彩空间给出。

    您有一个 RGB 文档,该文档在添加透明度时会强制转换为 CMYK 由于缺乏明确的混合空间。如果你要指定 RGB 作为您的显式混合空间,同时您添加了您的 透明,一切都会好起来的。

    他们推荐的一件事是在添加任何内容之前在您的 PdfWriter 上设置以下属性:

    writer.RgbTransparencyBlending = true;
    

    当我这样做时,我仍然看到一个非常小的变化,但没有它那么明显。

    【讨论】:

      【解决方案2】:

      这不是答案,我只需要能够发布代码。

      我无法重现您的结果,但如果我猜测它与您的 PDF 渲染器有关。您可以通过放大文本来确认这一点,放大后看起来是否一样?如果是这样,那就是您的渲染器试图将视觉提示应用于打印文档。如果没有,您可以发布执行此操作的代码的简化版本吗?这是对所有图像执行此操作还是仅对一个特定图像执行此操作?您如何使用段落、表格、HTML 解析或其他方式创建文本?你用的是什么版本的 iTextSharp?

      以下是针对 iTextSharp 5.1.2.0 的完整工作 WinForms C# 2010,可创建两页 PDF。第一页只有文本,第二页有文本,然后是从桌面加载的图像。在我的机器上,使用 Adob​​e Acrobat Pro 9.1.3 在屏幕上查看时,我看不到任何字体差异。

      using System;
      using System.IO;
      using System.Windows.Forms;
      using iTextSharp.text;
      using iTextSharp.text.pdf;
      
      namespace WindowsFormsApplication1 {
          public partial class Form1 : Form {
              public Form1() {
                  InitializeComponent();
              }
      
              private void Form1_Load(object sender, EventArgs e) {
                  string pdfFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf");
                  string imgFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.png");
      
                  using (FileStream fs = new FileStream(pdfFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
                      using (Document doc = new Document(PageSize.LETTER)) {
                          using (PdfWriter writer = PdfWriter.GetInstance(doc, fs)) {
                              doc.Open();
      
                              BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED);
                              iTextSharp.text.Font f = new iTextSharp.text.Font(bf, 14);
      
                              doc.NewPage();
                              doc.Add(new Paragraph("This is a test", f));
      
                              doc.NewPage();
                              doc.Add(new Paragraph("This is a test", f));
                              iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(imgFile);
                              img.ScaleAbsolute(100, 100);
                              doc.Add(img);
      
      
                              doc.Close();
                          }
                      }
                  }
      
                  this.Close();
              }
          }
      }
      

      【讨论】:

      • 我用的是4.2.0版本。通过添加 1 段和图像,我什至做了一个简单的例子,结果是一样的。放大到 800% 后,仍然可以看到文字之间的细微差别。
      猜你喜欢
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      相关资源
      最近更新 更多