iTextSharp:为什么在将图像添加到pdf页面时,文本字体是不同的?

时间:2012-03-12 14:07:42

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

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

Without image on page *页面上没有图片

With image on page *图片在页面上

正确的字体是图片#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();

2 个答案:

答案 0 :(得分:2)

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

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

  

你看到的是新放置的透明度对a的影响   以前没有包含它的PDF,当考虑不是时   给出最终输出文档的混合色彩空间。

     

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

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

writer.RgbTransparencyBlending = true;

当我这样做的时候,我仍然会看到一个非常小的转变,但没有它就像没有它那样明显。

答案 1 :(得分:0)

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

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

以下是一个完整的WinForms C#2010,目标是iTextSharp 5.1.2.0,可创建两页PDF。第一页只包含文本,第二页包含文本,后跟从桌面加载的图像。在我的机器上,使用Adobe 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();
        }
    }
}